我正在尝试创建一个函数,将 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 中的类型转换?
谢谢
不。可能存在对齐问题。
使用
memcpy
或联合。如果可能的话,一个像样的编译器会将其优化为简单的移动指令。