【问题标题】:How can i convert NSString to uint8_t array如何将 NSString 转换为 uint8_t 数组
【发布时间】:2011-10-29 19:08:09
【问题描述】:

我有一个像这样的 NSString:850210

如何将其转换为 uint8_t data[]={0x85,0x02,0x10};

有人可以帮我解决这个问题吗?

BR, 补充

【问题讨论】:

标签: iphone objective-c


【解决方案1】:
#import <Foundation/Foundation.h>
static NSString * const hexString = @"850210";

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    uint8_t         data[3]={0};
    const char      * theUniChar = hexString.UTF8String;

    for( int i = 0, c = (int)strlen(theUniChar)/2; i < c && i < sizeof(data)/sizeof(*data); i++ )
    {
        int     theNum = 0;
        sscanf( theUniChar + 2*i, "%2x", &theNum );
        data[i] = theNum;
    }

    printf( "{%x,%x,%x}\n", data[0],data[1],data[2] );


    [pool drain];
    return 0;
}

【讨论】:

  • 非常感谢这项工作,但如果你想要前导零,我当然会使用 "%02X" 和 theNum & 0xFF;转换回十六进制。
【解决方案2】:

遍历字符串并首先检查长度小于 3 的字符串。如果只是简单地调用 NSString 本身的 intValue 并且您拥有第一个也是唯一一个字节。

如果它大于或等于三,则首先读取三个数字并检查它是否大于 255。如果在两个字节中重新读取它并检查它们具有什么值,那就是一个字节。如果不是,则取前三个数字,这是一个字节。

对剩余的字符串(忽略已读入的数字创建的字符串)重复此过程。

祝你好运:)


我假设字符串是十进制格式。如果那是十六进制,那么只需一次读取两个数字。并用这个问题来帮助你:How can I convert hex number to integers and strings in Objective C?


第二次编辑:

我没有对此进行测试,但如果有任何错误,它们应该很容易修复:

NSString *hexString = @"8510A0";
uint8_t *result = (uint8_t *)malloc(sizeof(uint8_t) * ([hexString length] / 2));
for(int i = 0; i < [hexString length]; i += 2) {
    NSRange range = { i, 2 };
    NSString *subString = [hexString subStringWithRange:range];
    unsigned value;
    [[NSScanner scannerWithString:subString] scanHexInt:&value];
    result[i / 2] = (uint8_t)value;
}
// result now contains what you want
free(result)

【讨论】:

  • 您好,感谢您的建议,如果我可以一次读取两个,我如何将其放入 uint8_t 数组中?如何将字符串转换为 uint8_t#
  • 嗨,直到值是正确的,但结果是错误的。我将其打印为 %c 我没有得到所需的结果。有错吗??
  • 您是否已对其进行调试以检查结果?我认为您可能必须将索引转换为这样的结果: (int)(i / 2) ,然后不要忘记在完成后释放(结果)。并将其打印为 %c 将使用该特定代码打印 ascii 字符....(我在示例中放置的字符串也与您的不同)
  • 是的,我检查了结果,它一直保持为 85,当它的 A0 显示为 0 时,它的值。
  • 哈哈是的对不起,我现在意识到我的错误。我会编辑答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-27
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多