目标C:将十六进制(NSInline)转换为每字节十进制

时间:2015-08-28 02:55:56

标签: objective-c

我将十六进制characteristic.value(NSinline)转换为十进制。

这段数据如下:<d1448fe0 a1b1c827 efecdf87 a05b1907 5e4e62ec>,即20个字节。我想将每个字节存储在一个大小为20的数组中。我很好奇是否有更有效的方法来一次解析这个字节。我下面粘贴的当前代码正在工作,但考虑到我的采样率约为250 Hz,它的速度很慢。

我将十六进制值放入一个字符串然后放入一个字符数组中,然后解析循环遍历整个事物。

有什么想法吗?提前致谢

            int xval[20];
            NSString *val = @"";
            val = [val stringByAppendingFormat: @"%@",characteristic.value];

            const char *c = [val UTF8String];
            int number = [temp intValue];
            int counter_filler = 0;
            NSString *toFill = @"";
            int xval_counter = 0;
            unsigned binar;


            for (int i = 0; i < strlen(c);i++)
            {
                if (c[i] != '<' && c[i] != '>' && c[i] != ' ')
                {
                if (counter_filler == 2)
                {
                    counter_filler = 0;
                    toFill = @"";     
                }
                // make it a string
                toFill = [toFill stringByAppendingFormat: @"%c",c[i]];
                if (counter_filler == 1)
                {
                     NSScanner *scanner = [NSScanner scannerWithString:toFill];
                    [scanner scanHexInt:&binar];
                    xval[xval_counter] = binar;
                    xval_counter++;
                }

                counter_filler++;
                }

            }

1 个答案:

答案 0 :(得分:1)

如果^实际上是characteristic.value个对象,您可以用以下代码替换所有代码:

NSData

就是这样。这将把uint8_t xval[20]; [characteristic.value getBytes:xval length:sizeof(xval)]; 中的20个字节放入characteristic.value字节数组。

xval是一个无符号整数类型,它包含一个8位字节。

顺便说一句 - 从不依赖于对象的uint8_t方法的输出。对对象使用descriptionstringWithFormat:格式说明符时,会导致调用对象的%@方法以获取字符串表示形式。 description方法的输出未记录,可能会随时间而变化。始终使用类的适当方法来获取其值。