gpt4 book ai didi

objective-c - encodeHexString objc 实现,我是否应该支持奇数长度的十六进制字符串,如果是,如何?

转载 作者:行者123 更新时间:2023-12-03 17:08:20 24 4
gpt4 key购买 nike

我可能在标准库中遗漏了一些东西,但我不这么认为。我当前的实现是这样的:

int char2hex(unsigned char c) {
switch (c) {
case '0' ... '9':
return c - '0';
case 'a' ... 'f':
return c - 'a' + 10;
case 'A' ... 'F':
return c - 'A' + 10;
default:
WARNING(@"passed non-hexdigit (%s) to hexDigitToInt()", c);
return 0xFF;
}
}

- (NSData *)decodeHexString {
ASSERT([self length] % 2, @"Attempted to decode an odd lengthed hex string.");

NSData *hexData = [self dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *resultData = [NSMutableData dataWithLength:([hexData length]) / 2];

const unsigned char *hexBytes = [hexData bytes];
unsigned char *resultBytes = [resultData mutableBytes];

for(NSUInteger i = 0; i < [hexData length] / 2; i++) {
resultBytes[i] = (char2hex(hexBytes[i + i]) << 4) | char2hex(hexBytes[i + i + 1]);
}

return resultData;
}

decodeHexString 是 NSString 上的类别添加。

我想知道的是,是否值得支持奇数长度的十六进制字符串。如果是这样,我该怎么办?

P.S. 忽略我的调试宏。我知道 switch 语句中使用的语法是 GCC 扩展,可能无法在所有编译器中编译。哦,代码确实按照发布的方式工作。

最佳答案

这可能值得支持。如果 [hexData length] % 2decodeHexString 中的 for 循环之前不为零,您可以先去掉第一个数字并递增初始循环索引。

关于objective-c - encodeHexString objc 实现,我是否应该支持奇数长度的十六进制字符串,如果是,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1718036/

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