2013-06-11 37 views
0

林接收哪些是最,中和的曲線值的最低有效數字3個UINT8值:加入十六進制值來創建一個16位值

EG:(%C)在控制檯印刷:

1 A 4 

我需要將它們傳遞給接受uint16_t的信號視圖UI grapher。到目前爲止,我這樣做的方式不能正常工作。

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

*「我是否正確合併它們,或者只是添加值?」 - 爲什麼不記錄值或在調試器中檢查它們以檢查? (如果打印爲'1','A','4',那麼值爲0x31,0x41,0x34,結果可能不是你想要的。) –

+0

好吧,所以我收到十六進制值,我需要將它們轉換爲字節值。 –

回答

0

首先,您需要每個十六進制字符轉換爲其對應的4位(半字節)表示,然後將它們合併成一個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);