【发布时间】:2011-10-29 19:08:09
【问题描述】:
我有一个像这样的 NSString:850210
如何将其转换为 uint8_t data[]={0x85,0x02,0x10};
有人可以帮我解决这个问题吗?
BR, 补充
【问题讨论】:
-
这个问题可能会对你有所帮助:stackoverflow.com/questions/3056757/…
标签: iphone objective-c
我有一个像这样的 NSString:850210
如何将其转换为 uint8_t data[]={0x85,0x02,0x10};
有人可以帮我解决这个问题吗?
BR, 补充
【问题讨论】:
标签: iphone objective-c
#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;
}
【讨论】:
遍历字符串并首先检查长度小于 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)
【讨论】: