c - C 中的隐式类型转换(将 32 位 unsigned in 转换为 8 位 u int)

标签 c casting

我的问题看起来很像

How to store a 64 bit integer in two 32 bit integers and convert back again

(我有一个无符号的 32 位,我需要在 C 中放入 4 个无符号的 8 位变量)

但是

我的问题是这是否:

uint8_t a;
uint32_t b;
a = b;

保证 a 填充的是最右边的八位,而不是最左边的八位?

最佳答案

是的。执行以下任一操作:

uint32_t num32 = 0xdeadbeef;

uint8_t a = num32;       /* 0xef */
uint8_t b = num32 >> 8;  /* 0xbe */
uint8_t c = num32 >> 16; /* 0xad */
uint8_t d = num32 >> 24; /* 0xde */

或者这个:

union u
{
    uint32_t num32;

    struct
    {
        uint8_t a;
        uint8_t b;
        uint8_t c;
        uint8_t d;

    } bytes;

} converter;

converter.num32 = 0xdeadbeef;

第一个示例依赖于平台字节序,第二个依赖

关于c - C 中的隐式类型转换(将 32 位 unsigned in 转换为 8 位 u int),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3133376/

相关文章:

c - 如何调试生成格式错误的可执行文件的实验性工具链

c++ - 用 C++ 编写多平台实现

c - 错误 - void* - 未知大小

casting - 整数是如何在底层转换为字符串的?

将通用指针转换为 int 指针以进行优化

java - 传承与类型转换设计

c - 将用户输入的 char 存储为变量时出错

c - 如何创建 makefile?

c - 我们应该检查内存分配是否失败吗?

java - 对 ArrayList 泛型进行强制转换