gpt4 book ai didi

c++ - 将 6/10/12 位流转换为缩放的 unsigned char/short

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:22 24 4
gpt4 key购买 nike


在 PC 世界中,一个字节通常表示 8 位的内存边界对齐,计算机将其视为一个单元。在小型计算机和大型计算机中,也可以使用更长的序列,如 16 位和 32 位(分别称为全字和双字)。

但在遥感领域,传感器/探测器通过使用它们自己的辐射分辨率(例如 6 位、10 位和 12 位)来测量大气和地球辐射强度的变化。因此,地面站拍摄的遥感原始数据图像总是以6位、10位或12位BCD码流的形式打包。这些数据按扫描线存储。

我的工作是从一个打开的二进制文件中一个一个地读取这种扫描线,并存储到一个 unsigned char 源缓冲区中一段时间​​。对于 6 位流,我必须缩放到 8 位(一个字节),对于 10 位或 12 位流,我将使它们缩放为无符号短整数。最后,我应该得到一个 unsigned char(对于 6 位)或 unsigned short 目标缓冲区。

你能告诉我怎么做吗? C/C++ 代码演示将不胜感激!谢谢。

10101010 01110101 00011001
| |
-----------
10-bit BCD

10101010 01110101 00011001
| |
-----------
10-bit BCD

10101010 01110101 01100110
| |
------------
10-bit BCD

最佳答案

通常的做法是左移输入和输出的位数之差,然后把输入的高位补全低位。

unsigned char eightbit = (sixbit << 2) | (sixbit >> 4);
unsigned short sixteenbit = (tenbit << 6) | (tenbit >> 4);
unsigned short sixteenbit = (twelvebit << 4) | (twelvebit >> 8);

有一种我不常看到的低位替代方法 - 用噪声填充它们。这掩盖了原始样本中的一些量化误差。

unsigned char eightbit = (sixbit << 2) | (sixteenbitnoise >> 14);
unsigned short sixteenbit = (tenbit << 6) | (sixteenbitnoise >> 10);
unsigned short sixteenbit = (twelvebit << 4) | (sixteenbitnoise >> 12);

关于c++ - 将 6/10/12 位流转换为缩放的 unsigned char/short,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6380873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com