编辑:错误的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 */
谢谢!
既然它是一个二进制文件,你最好将原始整数读入一个整数数组。 – 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
直接将字符内存转换为一个整数只能工作在字节对齐的CPU上,而不是字对齐。如果你只是/总是在Intel x86上运行,那不会是一个问题。 – 2010-12-07 19:36:26