Это
всегда
обычно работают, независимо от платформы, вы находитесь на, если, работая просто значит «не крах». EDIT Я пропустил аргумент size
string::append
, так что он может на самом деле сбить или дать странные результаты из-за переполнения буфера на платформах, где int
s не имеют 4 байта.
Однако, вы можете наблюдать различные результаты, основанные на размере целого и endianness платформы ваш код работает на, что плохо если вы хотите обмениваться файлами, созданных на платформе на другой платформе той же программы.
Это зависит от того, что вы ожидаете от этого. Windows (обычно) работает на машинах little-endian с 32-битными целыми числами, что означает, что ваш код добавит 05 00 00 00
к вашей строке. Однако на машинах big-endian, которые также имеют 32-битные целые числа, ваш код добавит 00 00 00 05
к строке. Хуже того, ваш код может работать на платформах с 16-битными целыми числами, которые добавят 00 05
.
В зависимости от того, какого поведения вы хотите, это может быть хорошей идеей, чтобы реализовать «менее волшебный» способ добавляемых байт, как for
цикла, который знает он хочет добавить 4 байта в прямом порядке байты моды :
int number = 5;
for(int i = 0; i < 4; i++)
{
char numberByte = (number >> (8 * i)) & 0xFF;
cppstring.append(&numberByte, 1);
}
Таким образом, вы будете уверены, что результаты будут соответствовать на разных платформах, так как код не зависит ни от размера целого, ни порядка байтов.
Содержимое строкового объекта должно храниться в файле данных и содержать целые числа, которые должна считываться программой. – kaykun
Тогда вам, вероятно, нужно определить целое число фиксированного размера для формата файла и использовать соответствующий тип (например, int32_t) во всей вашей программе. –