Objective c 连接十六进制值以创建16位值
Im接收三个uint8值,它们是绘图值的最高、中间和最低有效位: 例如:在控制台(%c)中打印: 我需要将它们传递到一个接收uint16\t的信号视图UI图示器中。到目前为止,我做这件事的方式还不能正常工作Objective c 连接十六进制值以创建16位值,objective-c,bit-manipulation,Objective C,Bit Manipulation,Im接收三个uint8值,它们是绘图值的最高、中间和最低有效位: 例如:在控制台(%c)中打印: 我需要将它们传递到一个接收uint16\t的信号视图UI图示器中。到目前为止,我做这件事的方式还不能正常工作 uint16_t iChanI = (bgp->iChanIH << 8) + (bgp->iChanIM <<4 ) + bgp->iChanIL; uint16_t iChanQ = (bgp->iChanQH << 8)
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];
uint16_t iChanI=(bgp->iChanIH iChanIM iChanQH iChanQM您首先需要将每个十六进制字符转换为其等效的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);
uint8\u t to\u nyble(字符c)
{
返回'c'>='0'和&c iChanIH)iChanIM)iChanIL);
在我看来是对的。一定是其他地方出了问题。发布此片段输入和输出的示例值。“我是正确合并了它们,还是只是添加了值?”-为什么不记录这些值或在调试器中检查它们以进行检查?(如果打印为“1”、“A”、“4”,则值为0x31、0x41、0x34,结果可能不是您想要的。)好的,因此我收到十六进制值,需要将它们转换为字节值。“十六进制”是数字的表示形式。“字节”是一定数量的信息。您无法将十六进制转换为字节,这没有意义。
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);