【发布时间】:2012-04-10 14:05:27
【问题描述】:
我需要在 C 中提取 short 数据类型的特定部分(位数)。
例如,我有一个二进制 52504 作为 11001101000 11000,我想要前 6 位(FROM LSB --> MSB 即 011000 十进制 24)位和其余 10 位(11001101000 十进制 820)。
同样,我希望这个函数过于笼统,无法提取给定“开始”和“结束”的特定位数(即与一些十进制值等效的位块)。
我查看了其他帖子,但这些帖子没有帮助,因为给定的功能并没有太笼统。
我需要适用于 C 的 short 数据类型的东西。
编辑
我有一个大小为 2048 字节的短数组。其中每个像素为 10 位。所以我的 16 位由每个字节组成,有时占用 2 个像素数据,有时是 3 个像素数据。
喜欢
(像素:0,1) 10 位 + 6 位
然后(像素:1,2,3) 4 BITS(第一个像素剩余位)+ 10 BITS + 2 BITS。
等等……这种模式还在继续…… 所以,我只想提取每个像素并制作一个完整的数组,让每个像素完全占据整个字节(16位),比如...... 1 个字节应包含 1 个 DATA PIXEL,另一个 BYTE 应包含整个 16 位的其他 PIXEL 值,依此类推。
【问题讨论】:
-
只屏蔽你想要的,即
num & 0000000000111111,或者如果你想要另一端(num & 1111111111000000) >> 6 -
@hexa:你可能是对的,但这个问题是一个建设性的问题。该怎么办...?怎么办……?
-
你能把这个问题说得更具体一点吗?首先你说你想把这两个数字分成两部分,然后你说你想指定一个开始和结束,这是否意味着你想要三个数字?顶部、中间和底部?
-
实际上我正在处理 2048 大小的巨大数组,其中包含从相机拍摄的图像的某些像素的特定值。看看编辑
-
C 类型不保证大小。 short 可能有 18 位或 32 位或任何符合 C 标准的值。你需要指定一个具体的大小,或者使用 uint8_t 等大小的 int...
标签: c bit-manipulation bit bit-shift