Существует ли какое-либо промежуточное программное обеспечение / библиотека, которая преобразует ваши двоичные или текстовые данные из 64-разрядных в 32-разрядные?
Мы используем C++ как в переднем конце (windows 32-bit), так и во внутреннем (linux 64-bit). Они могут передавать двоичные или текстовые данные для общения. Существует ли какое-либо промежуточное программное обеспечение / библиотека, которая преобразует эти данные из 64-разрядных в 32-разрядные? Или это единственный вариант изменить свой код?
1 ответ
Нет такой вещи, как "64-битные текстовые данные". Текстовый файл просто содержит символы в некоторой кодировке. И в настоящее время нет доступной 64-битной кодировки. Самое длинное кодирование с фиксированной шириной - это UTF-32 длиной 32 бита. Для кодирования переменной длины это максимальная длина в 6 байтов для UTF-8 (правка: официально она была ограничена 4 байтами только потому, что диапазон для Unicode был ограничен U + 10FFFF) и другое число для других, но ни один не является длиной до 8 байт. Если есть различия, вам нужно преобразовать кодировку, а не 64-битную в 32-битную
Для получения дополнительной информации прочитайте Абсолютный минимум, который должен знать каждый разработчик программного обеспечения. Абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!)
Двоичный код - это просто последовательность битов, необязательно массив 64-разрядных или 32-разрядных чисел постоянной ширины, хотя в современных компьютерных архитектурах размер составляет несколько байтов. Вы должны прочитать данные точно так же, как они были написаны. Если вы пишете 64-битное значение, читайте как 64-битное значение независимо от 16, 32 или 64-битной программы. Как вы можете гарантировать, что число, записанное в 64-битном формате, не переполняется при кадрировании до 32-битного?
Если вы используете MSVC, то размеры шрифтов одинаковы как в 32-битном, так и в 64-битном режиме, за исключением указателей, поэтому изменение кода не требуется, если вы придерживаетесь стандарта. На большинстве других 64-битных платформ вам может потребоваться позаботиться, если вы используете long
так как он шире, чем в 32-битной программе.
Лучше использовать стандартные типы C++11, такие как intN_t
в cstdint
в кроссплатформенном коде. До C++11 и C99 многие библиотеки и компиляторы также определяют свои собственные стандартные целочисленные типы фиксированной ширины, такие как типы для совместимости, например, qint32 в Qt и __int32
в MSVC