如何在 C++ 中的大端和小端值之间进行转换?
如何在 C++ 中的大端和小端值之间进行转换? 我使用的是 VC++ 6.0。当我使用 _byteswap_ulong() 函数时,它需要头文件 intrin.h。 当我包含标头时,它会报告一个错误,指出编译器不兼容,并且 intrin.h 适用于 gcc 编译器。 那么除了这个函数之外,VC++中还有其他函数可以在大端和小端值之间进行转换吗?
How do I convert between big-endian and little-endian values in C++?
I'm using VC++ 6.0.when I used _byteswap_ulong() function it requires the header file intrin.h.
When I include the header it reports an error saying incompatible compiler and that intrin.h is for the gcc compiler.
So is there any other functions to convert between big-endian and little-endian values in VC++ other than this function?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在符合 POSIX 标准的系统中,您拥有标准的 byteswap(3) 函数:
这些函数专门用于网络使用,如名称所示(主机到网络长、主机到网络短等)
GNU BSD 系统还提供 endian(3) 函数:(
在 OpenBSD 上,位宽数字始终位于函数末尾:例如,be64toh() 与 betoh64()。)
否则,大多数人会定义自己的函数宏或函数:
您还可以使用汇编内部函数,例如 x86 上的 bswap 指令。 GCC 和 ICC 中的
__builtin_bswap64
。 从 VS7.0 开始,VS 中也有类似的情况。In POSIX-compliant systems, you have the standard byteswap(3) functions:
These are intended specifically for network use, as suggested by the name (host-to-network-long, host-to-network-short, etc.)
GNU and BSD systems also provide the endian(3) functions:
(On OpenBSD, the number for bit width is always at the end of the function: be64toh() vs. betoh64(), for example.)
Otherwise, most people define their own macros or functions:
You can also use assembly intrinsics, like with the bswap instruction on x86.
__builtin_bswap64
in GCC and ICC. Something similar is in VS since VS7.0.文档似乎说这些函数位于 stdlib.h 中。
The Docs seem to say these functions live in stdlib.h.