在 C 中使用强制转换将 `u16` 转换为 `u8[2]` 有效吗?

问题描述 投票:0回答:1

我正在尝试创建一个函数,将 C 中的

u16
转换为
u8[2]

以下代码已经过测试,但即使在阅读反汇编之后, 我不确定它是否便携或安全。

static inline uint8_t* write_u16(uint16_t in, uint8_t out[2], ArchEndian_t endian) {
    if (NATIVE_ENDIAN != endian){
        in = byte_swap(in);
    } 

    *((uint16_t*)out) = in; //< Is this portable and safe?

    return out; 
} 

我应该如何考虑 C 中的类型转换?

谢谢

c pointers type-conversion
1个回答
0
投票

不。可能存在对齐问题。

使用

memcpy
或联合。如果可能的话,一个像样的编译器会将其优化为简单的移动指令。

© www.soinside.com 2019 - 2024. All rights reserved.