Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从字符数组获取int_C++ - Fatal编程技术网

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