首页 > 解决方案 > 在C中更改一个字节的4个中间位

问题描述

我正在尝试将一个字节的 4 个中间位更改为对应于另一个字节的高半字节:

假设我们开始:

In = 0bABCDEFGH
Out = 0bXXXXXXXX // Some random byte

我想:

Out = 0bXXABCDXX

保持任何其他位在Out's 的极端不变。

我怎样才能做到这一点?

注意: “X”代表任何位,0 或 1,只是为了区分来自输入的内容。

我必须:

(0b00111100 & (IN>>2)) = 0b00ABCD00

,它过滤了高半字节并将其居中,但是然后呢?我怎样才能把它移到Out

标签: cbit-manipulation

解决方案


简单的:

out &= 0b11000011;
out |= (in >> 2 & 0b00111100);

out &= 0b11000011设置out0bxx0000xx保留 2 个最高有效位和 2 个最低有效位。in >> 2将输入移动 2 给我们0xYYABCDEF,YY可能是0011取决于是什么A。摆脱,YY我们EF& 0b00111100

正如@JB 所指出的,这0B不是标准符号,因此您应该使用其他东西,最好是十六进制0x符号。有关更多信息,请参阅内容。

因此使用十六进制这将是:

out &= 0xC3;
out |= (in >> 2 & 0x3C)

这是转换表

`0xf` is `0b1111`
`0x3` is `0b0011`
`0xc` is `0b1100`

推荐阅读