C 库函数通过各种转换将二进制字节数组转换为整数

发布于 2024-11-09 06:33:25 字数 102 浏览 0 评论 0原文

是否有一组 C 库函数(或在某处收集的非库函数)允许通过各种转换(大端数据、小端数据、补码签名、补码签名等)将字节数组数据转换为整数等等),考虑到机器本身的字节顺序?

谢谢!

Is there a set of C library functions (or non-library functions collected somewhere) which allow conversion of byte-array data into integers with various conversions (big-endian data, little-endian data, one's complement signing, two's complement signing, et cetera), taking into account the machine's own endianness?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美煞众生 2024-11-16 06:33:25

这已经很接近了,尽管我认为它不能处理一个补码与两个补码。您也许可以添加这一点。 http://code.google.com/p/protobuf-c/

This comes close, although I don't think it will handle one's complement vs. two's complement. You might be able to add that. http://code.google.com/p/protobuf-c/

暗藏城府 2024-11-16 06:33:25

据我了解,您正在尝试获取明确的 BIG_ENDIAN (或 LITTLE_ENDIAN)数字,而不必知道当前主机的约定是什么。这应该是可能的。

据我最好的理解,按照惯例,“网络字节顺序”始终是 BIG_ENDIAN。所以你可以调用htonx(),然后你就知道它是BIG_ENDIAN。然后,如果您想要 LITTLE_ENDIAN,您可以在自己的代码中手动转置字节。结果应该是您自己的 toBigEndian() 或 toLittleEndian() 函数。

问题的 2 的补码部分不承认相同的事情,因为这完全是一个约定问题。假设该数字有两个字节长 - 几乎每个 16 位值的组合都是有效的 1 的补码,也是有效的 2 的补码。 “正确”值完全取决于写入该值的代码对其的解释。

As I understand, you are trying to get an unequivocal BIG_ENDIAN (or LITTLE_ENDIAN) number, without necessarily knowing what your current host's convention is. This should be possible.

To my best understanding, by convention "network byte order" is always BIG_ENDIAN. So you can call htonx(), then you know it is BIG_ENDIAN. Then if you want LITTLE_ENDIAN, you can manually transpose the bytes in your own code. The result should be your own toBigEndian() or toLittleEndian() functions.

The 2's complement part of the question does not admit of the same thing, since it is entirely a matter of convention. Say the number is two bytes long - almost every combination of 16 bit values is both a valid 1's complement number, and also a valid 2's complement number. The "correct" value depends entirely on the interpretation that was put on it by the code which wrote that value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文