繁体   English   中英

将8位整数转换为32位

[英]Casting 8-bit int to 32-bit

我想我对字节序和移位感到困惑,请帮忙。

我有4个8位整数,我想将其转换为32位整数。 这是我在做什么:

uint h;
t_uint8 ff[4] = {1,2,3,4};

if (BIG_ENDIAN) {
    h = ((int)ff[0] << 24) | ((int)ff[1] << 16) | ((int)ff[2] << 8) | ((int)ff[3]);
}
else {
    h = ((int)ff[0] >> 24) | ((int)ff[1] >> 16) | ((int)ff[2] >> 8) | ((int)ff[3]);
}

但是,这似乎会产生错误的结果。 经过一点试验,我意识到应该是相反的:对于大字节序,我应该将位向右移动,否则向左移动。 但是,我不明白为什么。

这就是我的理解。 大字节序表示最高有效字节在前(第一个表示最左,对吗?也许这是我错的地方)。 因此,将8位int转换为32位int会将24个零添加到我现有的8位。 因此,要使其成为第一个字节,我需要将位24左移。

请指出我错了。

您始终必须将8位值左移。 但是在小端的情况下,您必须更改索引的顺序,以便第四个字节进入最高有效位置,而第一个字节进入最低有效位置。

if (BIG_ENDIAN) {
    h = ((int)ff[0] << 24) | ((int)ff[1] << 16) | ((int)ff[2] << 8) | ((int)ff[3]);
}
else {
    h = ((int)ff[3] << 24) | ((int)ff[2] << 16) | ((int)ff[1] << 8) | ((int)ff[0]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM