【发布时间】:2019-01-31 04:17:15
【问题描述】:
我有一个包含 4 个 unsigned char 类型元素的数组。如何将这些合并为一个十六进制值?我需要将此值转换为 IEE754 值。
例如unsigned char arr[]={0x41,0xD9,0xD4,0x03}
预期的 o/p :0x41D9D403
【问题讨论】:
-
多字节类型的问题在于字节顺序。一旦你确定这是一个简单的
memcpy调用。或者,由于您使用 C,因此您可以将union用于 type punning。 -
这就是你说的字节顺序。请建议。无符号字符结果;结果 = arr[0]
-
没有“十六进制值”这样的东西;你的意思是一个整数值的十六进制字符串表示,或者在这种情况下更可能是一个32位整数。十六进制只是整数值的人类可读表示;通常用于数据的表示或 ASCII 编码,不用于内部表示。
-
@Someprogrammerdude 不,您不应该使用 memcpy 或 union(或指针算术),因为它们取决于字节序。正确的解决方案是使用便携式位移,其他一切都是错误的。
-
@Lundin
memcpy或联合在字节排序问题解决后就可以了。也许我在评论中对此有点模糊。而来自char的memcpy数组或联合是在不破坏严格别名的情况下进行类型双关的唯一方法。
标签: c embedded embedded-linux