gpt4 book ai didi

c++ - C/C++如何将short转换为char

转载 作者:太空狗 更新时间:2023-10-29 21:30:37 25 4
gpt4 key购买 nike

我正在使用 MS C++。我正在使用类似

的结构
    struct header   {
unsigned port : 16;
unsigned destport : 16;
unsigned not_used : 7;
unsigned packet_length : 9;


};
struct header HR;

这里我需要把header的这个值放在单独的char数组中。

我做了 memcpy(&REQUEST[0], &HR, sizeof(HR));

但是 packet_length 的值没有正确显示。

就像我正在分配 HR.packet_length = 31;我得到 -128(第五字节)和 15(第六字节)。

如果你能帮我解决这个问题,或者他们是否有更优雅的方法来做到这一点。

谢谢

最佳答案

听起来像是您的结构的预期行为,因为您将 packet_length 定义为 9 位长。所以它的值的最低位已经在内存的第五个字节之内。因此,您在那里看到的值 -128(因为 signed char 中 1 的最高位被解释为负值),而值 15 是第 6 个字节中剩余的值。

内存位看起来像这样(倒序,即从高位到低位):

     byte 6    |     byte 5    | ...
0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0
packet_length | not_used | ...

另请注意,这种方法可能不可移植,因为多字节变量中的字节顺序取决于平台(参见 endianness)。

更新:我不是跨平台开发方面的专家,您也没有详细说明请求的布局等。无论如何,在这种情况下,我会尝试将字段设置为单独请求,而不是将结构 memcopying 到其中。这样我至少可以控制每个字段的确切值。

关于c++ - C/C++如何将short转换为char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2443079/

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