连接十六进制值以创建16位值

时间:2013-06-11 13:54:12

标签: objective-c bit-manipulation

我收到三个uint8值,这是一个绘图值的最高,中等和最低有效数字:

EG:在控制台中打印(%c):

   1 A 4

我需要将它们传递给信号视图UI grapher,它接受一个uint16_t。到目前为止,我这样做的方式不正常。

 uint16_t iChanI = (bgp->iChanIH << 8) + (bgp->iChanIM <<4 ) + bgp->iChanIL;
 uint16_t iChanQ = (bgp->iChanQH << 8) + (bgp->iChanQM <<4) + bgp->iChanQL;

[self updateSView:iChanI ichanQ:iChanQ];

我正确地合并它们,还是只添加值?

非常感谢任何帮助,

谢谢,

1 个答案:

答案 0 :(得分:0)

首先需要将每个十六进制字符转换为等效的4位(nybble)表示,然后将它们合并为int16_t,例如

uint8_t to_nybble(char c)
{
    return 'c' >= '0' && c <= '9' ? c - '0' : c - 'A' + 10;
}

uint16_t iChanI = (to_nybble(bgp->iChanIH) << 8) |
                  (to_nybble(bgp->iChanIM) << 4) |
                   to_nybble(bgp->iChanIL);