便携式有符号/无符号字节转换,C++

发布于 2024-08-13 08:02:08 字数 215 浏览 3 评论 0原文

我正在使用有符号到无符号字节(int8_t)转换来打包字节。

uint32_t(uint8_t(byte)) << n

这可以在 Intel Linux 上使用 GCC 运行。对于其他平台/编译器(例如 PowerPC)是否可移植? 有更好的方法吗?在我的情况下使用 bitset 是不可能的。 我通过 boost 使用 stdint

I am using signed to unsigned byte(int8_t) cast to pack byts.

uint32_t(uint8_t(byte)) << n

This works using GCC on Intel Linux. Is that portable for other platforms/compilers, for example PowerPC?
is there a better way to do it? using bitset is not possible in my case.
I am using stdint via boost

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

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

发布评论

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

评论(3

梅倚清风 2024-08-20 08:02:08

它不可移植,因为类型 uint32_t 和 uint8_t 不是 C++ 标准的一部分。所有此类操作本质上都依赖于实现。

It's not portable, as the types uint32_t and uint8_t are not part of the C++ Standard. All such maipulations are inherently implementation dependent.

在你怀里撒娇 2024-08-20 08:02:08

如果您使用 Boost Integer 库中的 boost/cstdint.hpp,那么是的,typedef 是可移植的(跨平台)。boost/cstdint.hpp 标头是旨在用 C++ 实现 C99 stdint.h 功能。

来自 Boost 文档

标题
提供 typedef 的有用之处
编写需要的可移植代码
某些整数宽度。所有 typedef 的
位于命名空间 boost 中。

If you are using boost/cstdint.hpp from the Boost Integer library, then yes, the typedefs are portable (cross-platform.) The boost/cstdint.hpp header is meant to implement C99 stdint.h functionality in C++.

From the Boost documentation:

The header
provides the typedef's useful for
writing portable code that requires
certain integer widths. All typedef's
are in namespace boost.

献世佛 2024-08-20 08:02:08

在实践中,是的,它很可能适用于您遇到的大多数其他平台(特别是如果 Boost 移植到它)。但是,如果您将这些打包值写入文件或网络套接字,则必须处理字节顺序(您的 PowerPC 示例具有大端字节顺序,而英特尔具有小端字节顺序)。在这方面,代码在不同的硬件架构上会有不同的表现。

In practice, yes it's most likely going to work on most other platforms you encounter (especially if Boost is ported to it). However, if you are writing these packed values to files or network sockets, you'll have to deal with byte order (your example of PowerPC has big-endian byte order while Intel have little-endian). In that respect, the code will behave differently on different hardware architectures.

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