Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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++ ntohl()的跨平台版本?-C++;_C++_Cross Platform_Endianness - Fatal编程技术网

C++ ntohl()的跨平台版本?-C++;

C++ ntohl()的跨平台版本?-C++;,c++,cross-platform,endianness,C++,Cross Platform,Endianness,我正在编写一个跨平台客户机,在为使用而提取的档案中,它对每个文件使用IEEE 802.3以太网CRC-32校验和。我对所有文件运行此检查,如下所示: if(s3d_meta_block.crc != 0x61580AC9) { errorLog.writeError("File %i is not a valid file/ or is the directory", i); } 它最终在每一个文件上都失败了,我发现它是用ntohl(0x61580AC9)在类似的客户机中编写的 我是在

我正在编写一个跨平台客户机,在为使用而提取的档案中,它对每个文件使用IEEE 802.3以太网CRC-32校验和。我对所有文件运行此检查,如下所示:

if(s3d_meta_block.crc != 0x61580AC9)
{
    errorLog.writeError("File %i is not a valid file/ or is the directory", i);
}
它最终在每一个文件上都失败了,我发现它是用ntohl(0x61580AC9)在类似的客户机中编写的

我是在64位Windows上写这篇文章的,我希望这篇文章能够在所有平台上运行,而不必包含“Winsock2.h”和其他与endianess相反的库


谢谢

ntohl()包含在许多平台上,并且将/不会根据处理器对齐的需要交换位。代码中唯一需要的是#def’s包含此函数的正确头文件(我从未见过没有它的操作系统)

ntohl()包含在许多平台上,并且不会根据处理器的需要交换位。代码中唯一需要的是#def包含此函数的正确头文件(我从未见过没有它的操作系统)

,def可能依赖于是否定义了WIN32。如果不是,则使用include而不是winsock。@dbrank0如果要发表好的评论,请发表示例;-)@AdrianCornish
ntohl
仅在字节顺序不是big-endian时交换。对齐与此无关。@moshbear您能再详细说明一下吗。因此,如果我要运行ntohl,它会检测它是什么样的endianess,然后只在需要时交换它?@Satchmo-
ntohl
知道它所在的平台,所以它不必检测任何东西。在某些系统上它更改数据,在另一些系统上它不需要做任何事情。def可能依赖于是否定义WIN32。如果不是,则使用include而不是winsock。@dbrank0如果要发表好的评论,请发表示例;-)@AdrianCornish
ntohl
仅在字节顺序不是big-endian时交换。对齐与此无关。@moshbear您能再详细说明一下吗。因此,如果我要运行ntohl,它会检测它是什么样的endianess,然后只在需要时交换它?@Satchmo-
ntohl
知道它所在的平台,所以它不必检测任何东西。在某些系统上,它更改数据,在另一些系统上,它不需要做任何事情。