我需要将8位数字(0 - 255或#0 - #FF)转换为12位等效数字(0 - 4095或#0 - #FFF)
我不想只是对同一个号码进行直接转换。我想表示相同的比例,但是12位。
例如: -
8位的0xFF应转换为12位的0xFFF
8位的0x0应该转换为12位的0x0
8位的0x7F应转换为12位的0x7FF
8位中的0x24应转换为12位中的0x249
我应该使用哪些特定的算法或技术?
我在C编码
答案 0 :(得分:6)
试试x << 4 | x >> 4
。
这已由OP更新,从x&lt;&lt; 4 + x&gt;&gt; 4
答案 1 :(得分:3)
如果您能够浏览更大的域名,那么这可能有所帮助:
b = a * ((1 << 12) - 1) / ((1 << 8) - 1)
这很丑,但几乎按照要求保留缩放。当然你可以放常数。
答案 2 :(得分:2)
怎么样:
x = x ?((x + 1) << 4) - 1 :0
答案 3 :(得分:0)
我使用数学方程式y=mx+c
假设值的低范围为零。
您可以将数据缩放为m的倍数(倍数可增加范围,而除数则可减少)
例如
我的ADC数据是12位。整数范围= 0至4095
我想将此数据缩小到0到255之间。
m=(y2-y1/x2-x1)
m=(4095-0/255-0)
m=16.05 = 16
因此,将以12位接收的数据除以16,以转换为8位。 这种转换本质上是线性的。
希望这也是一个好主意。 Image Link