从char数组中获取int

时间:2012-05-07 03:11:36

标签: c++

我在从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 intead of 1024?

2 个答案:

答案 0 :(得分:3)

您可以在具有“big-endian”处理器的计算机上获得预期的转换,例如68000系列。在英特尔处理器 - “小端”机器上 - 字节顺序颠倒过来,你得到的答案是预期的。

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

答案 1 :(得分:2)

显然你的系统是big-endian,这意味着较大整数的最低有效字节位于较大地址,而大多数有效字节位于较低位置。

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

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