在PC的世界中,一个字节通常表示计算机将其视为单个单元的8位存储器边界对齐。在小型和大型计算机中,像16位和32位这样的更长的序列(分别称为全字和双字)也是可能的。
但在遥感领域,传感器/探测器通过使用自己的辐射分辨率(如6位、10位和12位)来测量来自大气和地球的辐射强度的变化。因此,地面站捕获的遥感原始数据图像总是以6位、10位或12位BCD流的形式打包。这些数据被逐条扫描线存储。
我的工作是从一个开放的二进制文件中逐条读取这种扫描线,并将其存储到一个无符号的字符源缓冲区中。对于6位流,我必须缩放到8位(一个字节),而对于10位或12位流,我将使它们缩放为无符号短整型。最后,我应该得到一个无符号的字符(对于6位)或无符号的短目标缓冲区。
你能教我怎么做吗?C/C++代码演示将非常感谢!谢谢。
10101010 01110101 00011001
| |
-----------
10-bit BCD
10101010 01110101 00011001
| |
-----------
10-bit BCD
10101010 01110101 01100110
| |
------------
10-bit BCD发布于 2011-06-17 12:11:01
通常的方法是将输入和输出之间的位数差向左移位,然后将输入的高位相加,以填充低位。
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);https://stackoverflow.com/questions/6380873
复制相似问题