【发布时间】:2014-11-29 12:53:24
【问题描述】:
我必须从一个文件中读取 10 个字节,最后 4 个字节是一个无符号整数。但我得到了一个 11 字符字节长的字符数组/指针。如何将最后 4 个字节(末尾没有零终止字符)转换为无符号整数?
//pesudo code
char *p = readBytesFromFile();
unsigned int myInt = 0;
for( int i = 6; i < 10; i++ )
myInt += (int)p[i];
正确吗?对我来说似乎不正确。
【问题讨论】:
-
使用
memcpy。*(int*)(p+6)(1) 可能会遇到对齐问题并且 (2) 违反严格的别名。字节顺序也可能是一个问题。 -
您实际上需要将不同字节的位移动到适当的位置。取决于传输值的字节顺序。循环中的赋值可能是
myInt = myInt << 8 | static_cast<unsigned char>(p[i])。或者,您可能希望反向循环循环。 -
伙计们,这些都应该变成答案,而不是 cmets。