首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将6/10/12位流转换为缩放的无符号字符/短字符

将6/10/12位流转换为缩放的无符号字符/短字符
EN

Stack Overflow用户
提问于 2011-06-17 10:53:19
回答 1查看 2.9K关注 0票数 2

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

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

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

你能教我怎么做吗?C/C++代码演示将非常感谢!谢谢。

代码语言:javascript
复制
10101010 01110101 00011001
|         |
-----------
 10-bit BCD

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

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

回答 1

Stack Overflow用户

发布于 2011-06-17 12:11:01

通常的方法是将输入和输出之间的位数差向左移位,然后将输入的高位相加,以填充低位。

代码语言:javascript
复制
unsigned char eightbit = (sixbit << 2) | (sixbit >> 4);
unsigned short sixteenbit = (tenbit << 6) | (tenbit >> 4);
unsigned short sixteenbit = (twelvebit << 4) | (twelvebit >> 8);

对于我很少见过的低位,还有一种替代方法--用噪声填充它们。这掩盖了原始样本中的一些量化误差。

代码语言:javascript
复制
unsigned char eightbit = (sixbit << 2) | (sixteenbitnoise >> 14);
unsigned short sixteenbit = (tenbit << 6) | (sixteenbitnoise >> 10);
unsigned short sixteenbit = (twelvebit << 4) | (sixteenbitnoise >> 12);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6380873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档