将unsigned char转换为int和short

时间:2014-11-22 02:09:04

标签: c++ arrays char int

我是新手,所以我首先要说的是,当我查看一些代码时,我意识到这个功能对我来说没有任何意义。

正如您所看到的,此特定函数使用按位运算符将4个无符号char元素转换为整数。

//使用little-endian格式

将四字符数组转换为整数
int toInt(const char* bytes) {
    return (int)(((unsigned char)bytes[3] << 24) |
                 ((unsigned char)bytes[2] << 16) |
                 ((unsigned char)bytes[1] << 8) |
                 (unsigned char)bytes[0]);
}

short toShort(const char* bytes) {
    return (short)(((unsigned char)bytes[1] << 8) |
                   (unsigned char)bytes[0]);
}

我已经知道按位运算符和char如何使用1个字节,int使用4个字节。为什么将char位向左移动24位而不是将其显式转换为int将其转换为int? 为什么这个函数需要按位运算符?

这个功能超出了我的理解范围,请解释这段代码以及它是如何工作的,或者至少给我一个能够彻底解释这个问题的链接。

我到处寻找解释,却找不到。

这可能有一个简单的解释。

1 个答案:

答案 0 :(得分:6)

  

为什么这个函数需要按位运算符?

按位运算符用于从四个单字节数“汇编”四字节数。

假设您有四个8位数字,如下所示:

aaaaaaaa
bbbbbbbb
cccccccc
dddddddd

转移给你这个:

aaaaaaaa000000000000000000000000
00000000bbbbbbbb0000000000000000
0000000000000000cccccccc00000000
000000000000000000000000dddddddd

按位运算符OR允许您从这四个部分中生成一个数字,因为OR - 任意位x为零会产生x。如果对齐如上所示的四字节数字,则每个位置只有一个非零位,因此按位OR会产生所需的结果:

aaaaaaaabbbbbbbbccccccccdddddddd