我收到三个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];
我正确地合并它们,还是只添加值?
非常感谢任何帮助,
谢谢,
答案 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);