2012-01-06 50 views
1

我正在编写一个跨平台的客户端,并在提取使用的存档中,它为每个文件使用IEEE 802.3以太网CRC-32校验和。我跑对所有像这样的文件,这个检查:跨平台版本的ntohl()? - C++

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”和涉及反转字节序的其他库。

谢谢!

回答

1

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

+0

这def可能可以依赖__WIN32__被定义或不。如果没有,请包括而不是winsock。 – dbrank0 2012-01-06 06:36:47

+0

@ dbrank0如果你打算发布一个很好的评论发布一个例子;-) – 2012-01-06 06:38:20

+0

@AdrianCornish'ntohl'只有在字节排序不是大端时才会交换。对齐与它无关。 – moshbear 2012-01-06 09:44:56