C++ 从字符数组获取int
从字符[]中获取整数时遇到问题。我的代码非常简单,但我看不出问题出在哪里。C++ 从字符数组获取int,c++,C++,从字符[]中获取整数时遇到问题。我的代码非常简单,但我看不出问题出在哪里。 代码如下: char* rawd = ..... int resultSize = ((int*)rawd)[0]; cout << "BYTES ::: " << (int)(rawd[0]) << " " << (int)(rawd[1]) << " " << (int)(rawd[2]) << " " << (int)
代码如下:
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;
我希望resultSize
为1024
为什么
resultSize
包含262144个1024字节的整数?在带有“big-endian”处理器(如68000系列)的机器上,您会得到预期的转换。在英特尔处理器——“little endian”机器上,字节顺序是颠倒的,得到的答案是预期的
将原始内存字节转换为数据类型(如
int
、double
等)非常棘手,如果数据可能来自另一台机器,则非常棘手。有称为ntohs()
,ntohl()
,htons()
,和htonl()
的半标准函数,它们在主机特定顺序和标准的“网络顺序”(即big-endian)之间进行转换;这些函数在所有类UNIX系统和某些Windows C库中都可用。在带有“big-endian”处理器(如68000系列)的机器上,您将获得预期的转换。在英特尔处理器——“little endian”机器上,字节顺序是颠倒的,得到的答案是预期的
将原始内存字节转换为数据类型(如
int
、double
等)非常棘手,如果数据可能来自另一台机器,则非常棘手。有称为ntohs()
,ntohl()
,htons()
,和htonl()
的半标准函数,它们在主机特定顺序和标准的“网络顺序”(即big-endian)之间进行转换;这些函数在所有类UNIX系统和某些Windows C库中都可用。显然,您的系统是big-endian,这意味着较大整数的最低有效字节位于较大的地址,而最高有效字节位于较低的地址
小端点结果将是0+4*256+0*2562+0*2563=1024
Big-endian结果将是0+0*256+4*2562+0*2563=262144显然,您的系统是Big-endian,这意味着较大整数的最低有效字节位于较大的地址,而最高有效字节位于较低的地址 小端点结果将是0+4*256+0*2562+0*2563=1024
Big-endian结果将是0+0*256+4*2562+0*2563=262144看起来您希望在小endian系统上出现Big-endian行为。看起来您希望在小endian系统上出现Big-endian行为。哇!数据来自同一个mahine,但来自java虚拟机。我不知道jvm是big endian。谢谢确实如此。即使在英特尔的硬件上,Java也总是大端的。这意味着它总是以“网络字节顺序”进行通信,这对于面向网络的语言来说是一个很好的特性。哇!数据来自同一个mahine,但来自java虚拟机。我不知道jvm是big endian。谢谢确实如此。即使在英特尔的硬件上,Java也总是大端的。这意味着它总是以“网络字节顺序”进行通信,这对于面向网络的语言来说是一个很好的特性。
BYTES ::: 0 0 4 0
SIZE RETURNED :::::: 262144