gpt4 book ai didi

c++ - 将字节数组(char数组)转换为整数类型(short、int、long)

转载 作者:IT老高 更新时间:2023-10-28 22:35:59 27 4
gpt4 key购买 nike

我想知道在将字节数组转换为短/整数/长时系统字节序是否重要。如果代码在 big-endian 和 little-endian 机器上运行,这样做会不会不正确?

short s = (b[0] << 8) | (b[1]);
int i = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3])

最佳答案

是的,字节顺序很重要。在 little endian 中,最重要的字节位于 short 或 int 的上半部分 - 即 short 的 8-15 位和 int 的 24-31 位。对于大端,字节顺序需要颠倒:

short s = ((b[1] << 8) | b[0]);
int i = (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | (b[0]);

请注意,这假定字节数组是小端序。字节数组和整数类型的字节序和转换不仅取决于CPU的字节序,还取决于字节数组数据的字节序。

建议将这些转换包装在能够知道(通过编译标志或在运行时)系统字节序并正确执行转换的函数中。

此外,为字节数组数据创建一个标准(例如,总是大端),然后使用 socket ntoh_sntoh_l 会将有关字节序的决定交给知道这些事情的操作系统 socket 实现。请注意,默认网络顺序是大端(ntoh_x 中的 n),因此将字节数组数据设为大端将是最直接的方法。

正如 OP (@Mike) 所指出的,boost 还提供字节序转换功能。

关于c++ - 将字节数组(char数组)转换为整数类型(short、int、long),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678166/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com