gpt4 book ai didi

objective-c - nsstring 到 unsigned char []

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:30 25 4
gpt4 key购买 nike

我会转换

NSString *myString = @"0x10 0x1c 0x37 0x00"; //Aquired reading text file using NSString methods..

unsigned char convertedfrommyString[] = { 0x10, 0x1c, 0x37, 0x00 };

我的目标是获取它们然后使用此代码交换它:

unsigned char convertedfrommyString[] = { 0x10, 0x1c, 0x37, 0x00 };
int data = *((int *) convertedfromString);
NSLog(@"log = %08x", data);

输出应该是:

log = 00371c10

有什么帮助吗?

编辑

从 Jan Baptiste Younès 和 Sven 那里,我找到了理解我的问题并用这段代码解决的方法:

NSString *myString = [[@"0x10 0x1c 0x37 0x00" stringByReplacingOccurrencesOfString:@"0x" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];
unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:myString];
[scanner scanHexInt:&result];
int reverse = NSSwapInt(result);
NSLog(@"scanner: %8u", result);
NSLog(@"bytes:%08x", result);
NSLog(@"reverse:%08x (that is what i need!)", reverse);

真的不错!但是我可以接受两个答案吗?

最佳答案

这不仅仅是一个简单的转换,您需要实际解析字符串中的值。您可以使用 NSScanner 来执行此操作。

NSScanner *scanner = [NSScanner scannerWithString: @"0x10 0x1c 0x37 0x00"];
unsigned char convertedfrommyString[4];
unsigned index = 0;
while (![scanner isAtEnd]) {
unsigned value = 0;
if (![scanner scanHexInt: &value]) {
// invalid value
break;
}

convertedfrommyString[index++] = value;
}

当然,此示例缺少错误处理(单个值无法放入 unsigned char 中,或者可能超过四个)。

但这只解决了一半的问题。另一个问题是将其转换为 int。您通过将 unsigned char 指针转换为 int 指针来完成此操作。这不是可移植的,在 C 中也不合法。要始终获得您想要的结果,您应该使用位移来组装您的 int。所以在你的循环中你可以做

result = result | (value << i);
i += 8;

而不是将值放在无符号字符数组中。为此,resulti 都应初始化为零。

关于objective-c - nsstring 到 unsigned char [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27256314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com