EDIT: исправлен неправильный тип num2.Листинг массива символов в целое число
Здравствуйте,
У меня есть некоторые символьные массивы известного размера, который содержит исходные целочисленные данные, считанные из двоичного файла.
Размер всех этих массивов имеет размер целых чисел.
Я хотел бы спросить, является ли следующая операция безопасной и точной во всей нормальной ситуации, если предположить, что соответствие исходных данных и компьютера, на котором выполняется этот код, согласуется.
char arr1[4] = { ... };
char arr2[2] = { ... };
uint32_t num1 = *static_cast<uint32_t*>(arr1); /* OR num1 = *(uint32_t*)arr1 in C */
uint16_t num2 = *static_cast<uint16_t*>(arr2); /* OR num2 = *(uint32_t*)arr2 in C */
Спасибо!
Поскольку это двоичный файл, вам лучше читать необработанные целые числа в массиве int. – chrisaycock 2010-12-07 19:19:56
Никогда не объявляйте более одной переменной за раз. Это может привести к тонким ошибкам. https://www.securecoding.cert.org/confluence/display/seccode/DCL04-C.+Do+not+declare+more+than+one+variable+per+declaration – 2010-12-07 19:23:22
Непосредственная заливка памяти символов целому числу работает только на процессорах с выравниванием байтов, а не выравниванием слов. Если вы только/всегда работаете на Intel x86, это не будет проблемой. – 2010-12-07 19:36:26