我在从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?
答案 0 :(得分:3)
您可以在具有“big-endian”处理器的计算机上获得预期的转换,例如68000系列。在英特尔处理器 - “小端”机器上 - 字节顺序颠倒过来,你得到的答案是预期的。
将原始内存字节转换为int
,double
等数据类型是很棘手的,如果数据可能来自另一台机器,非常很棘手。有一些名为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