Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 连接十六进制值以创建16位值_Objective C_Bit Manipulation - Fatal编程技术网

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

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)

Im接收三个uint8值,它们是绘图值的最高、中间和最低有效位:

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

我需要将它们传递到一个接收uint16\t的信号视图UI图示器中。到目前为止,我做这件事的方式还不能正常工作

 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);