将存储在 2 个无符号字符中的二进制转换为整数

Converting binary stored in 2 unsigned character to integer

如果我有两个变量:

unsigned char var1, var2;
var1 = 4A; // for simplicity I am showing the hex value 4A, but it is 1 
            // byte of binary representing the value 4A - 0100 1010
var2 = 3F;

我想 return 从函数给出的整数结果:3F4A

在 C 中我可以简单地这样做吗?

int result;
var2 << 8;   // left shift var2 by 8 bits
result = var1 + var2;
return result;

我可以通过这种方式简单地将存储在char变量中的二进制"cast"转换为int吗?即会导致 return 整数 16202?

您可以尝试像这样使用一些讨厌的位级别黑客攻击:

result = (int) ( ((int)var2) << 8 | var1 )

我不确定bitshift是否会溢出var2,所以先将其转换为int,将其向左移动8位,然后与var1进行二进制OR。

虽然在大多数平台上它都可以使用带符号的算法,但为了在形式上迂腐地正确,您应该使用 unsigned 类型来计算位模式。

现在,首先

var2 << 8;

不左移var2: 只是一个计算结果的表达式,被丢弃了。

结果是有符号类型 int,因为 int 是操作数的最高通用类型。

你想要一个unsigned计算,所以确保至少一个操作数是无符号类型,即

return static_cast<int>( var1 + (var2 << 8u) );

要完全是位级的,请将 + 替换为位级或 |。但是逻辑上没有关系,很可能生成相同的机器码。

此行:'var2 << 8; ' 将失败

(应该会被编译器捕获,.

始终在启用所有警告的情况下进行编译的另一个好理由)

因为 var2 只有 8 位宽。

建议使用第三个变量来保存结果:

int var3;  
var3 = (int)var2;  
var3 <<=8;  
var3 |= (int)var1;

以上是简单的步骤,许多步骤可以组合。