【发布时间】:2016-11-15 16:48:33
【问题描述】:
我是字节序的新手。 我正在尝试将大端整数数组转换为小端的十六进制字符串。我试图将大端整数数组转换为小端十六进制十进制字符串。但最后,得到大端六进制编码字符串而不是小端。请帮帮我
gint16 frame[5] = {10, -26, 35, 7, -35}; //big endian
gint16 frame_i[5];
size_t i;
for (i= 0; i < 5; i++) {
frame_i[i] = (frame[i] << 8) | ((frame[i] >> 8) & 0xFF); //big endian to little endian
}
char *str = malloc(5 * 4 + 1);
size_t j;
for (j= 0; j < 5; j++) {
snprintf(str + j * 4, 5, "%04X", frame_i[j] & 0xFFFF); // getting big endian instead of little endian
}
【问题讨论】:
-
我无法想象你为什么需要一个 little-endian 字符串。数字的文本表示始终为 m.s。数字第一。字节序与数组的组织方式无关:问题在于内存中的字节序列,多字节值由处理器自然存储。请read about endianness.
-
此外,
(frame_i[i] << 8) | ((frame_i[i] >> 8) & 0xFF);这一行没有任何作用——表达式的值没有被赋值。 -
请张贴Minimal, Complete, and Verifiable example,这样可以避免问题中出现愚蠢的错误,以免出现更多转录错误。
-
对不起。将在以后的帖子中检查
-
@WeatherVane “数字的文本表示总是 m.s. digit first。” --> 像“十四”(四 + 十)这样的文本表示怎么样? ;-)
标签: c endianness