如何将NSString转换为uint8_t数组

时间:2011-08-18 13:16:30

标签: iphone objective-c

我有一个像这样的NSString:850210

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

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

BR, Suppi

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

循环遍历字符串并首先检查长度为&lt;的字符串。 3.如果它只是简单地在NSString本身上调用intValue而你有第一个也是唯一的字节。

如果它大于或等于3,则先读取三个数字并检查是否大于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)