0

我在从 char[] 获取整数时遇到问题。我是一个非常简单的代码行,但我看不出问题出在哪里。
这是代码:

char* rawd = .....
int resultSize = ((int*)rawd)[0];

cout << "BYTES ::: " << (int)(rawd[0]) << " " << (int)(rawd[1]) << " " << (int)(rawd[2]) << " " << (int)(rawd[3]) << endl;
cout << "SIZE RETURNED :::::: " << resultSize << endl;

这是打印的内容:

BYTES ::: 0 0 4 0
SIZE RETURNED :::::: 262144

我预计resultSize是1024。

为什么resultSize包含 262144 而不是 1024?

4

2 回答 2

3

您将在具有“大端”处理器(如 68000 系列)的机器上获得预期的转换。在英特尔处理器——“小端”机器上——字节顺序是颠倒的,你得到的答案是预期的。

将原始内存字节转换为 , 等数据类型intdouble棘手,如果数据可能来自另一台机器,则非常棘手。ntohs()有称为, ntohl(),的半标准函数htons()htonl()它们在特定于主机的顺序和标准的“网络顺序”之间进行转换,即大端;这些函数在所有类 UNIX 系统和一些 Windows C 库中都可用。

于 2012-05-07T03:16:43.197 回答
2

显然您的系统是大端的,这意味着较大整数的最低有效字节位于更大的地址,而最高有效字节位于较低的地址。

小端结果将是 0 + 4*256 + 0*256 2 + 0*256 3 = 1024

大端结果将是 0 + 0*256 + 4*256 2 + 0*256 3 = 262144

于 2012-05-07T03:18:37.750 回答