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

标签 c++ c struct

我正在使用 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/

相关文章:

c - "static int function(...) __acquires(..) __releases(...){"是什么意思?

c - 如何编写一个程序来查找整型变量的最大值

c - int * x 是否等同于 int * int x?

c++ - 以下结构定义是什么意思?

c - 全局结构内存错误

android - 编译 native_app_glue.c 导致库文件无效

c++ - 传递或返回变量时并不总是调用复制构造函数

c++ - 使用对 const 结构的 const 数组的引用进行构造

C++ while循环不起作用

c++ - 此代码行为是否已定义?