【问题标题】:Convert Hexadecimal to NSData [duplicate]将十六进制转换为 NSData [重复]
【发布时间】:2013-06-18 18:10:09
【问题描述】:

我从网络服务获取这个十六进制

http://www.moodpin.it/cms/listar_avatar?id=9

并尝试转换为 NSData 并设置 UIImageView 但它不起作用

这是我的代码:

NSData *dataImage =  [appDelegate hexStringToData:avatar.avatar];
[imageView setImage:[UIImage imageWithData:dataImage]];

 - (NSData *) hexStringToData:(NSString *) aString
               {
NSString *command = aString;
command = [command stringByReplacingOccurrencesOfString:@" " withString:@""];
NSMutableData *commandToSend= [[NSMutableData alloc] init];
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
int i;
for (i=0; i < [command length]/2; i++) {
    byte_chars[0] = [command characterAtIndex:i*2];
    byte_chars[1] = [command characterAtIndex:i*2+1];
    whole_byte = strtol(byte_chars, NULL, 16);
    [commandToSend appendBytes:&whole_byte length:1];
}
NSLog(@"%@", commandToSend);
return commandToSend;
 }

【问题讨论】:

    标签: iphone ios objective-c ios4 iphone-sdk-3.0


    【解决方案1】:

    for (i=0; i &lt; 8; i++) {

    “不起作用”非常模糊。我的第一印象是您只查看前 16 个字节(每次迭代两个字节),因此您显然不会获得与输入字符串对应的数据块。似乎您应该使用字符串的长度来管理 for 循环。此外,如果字符串包含奇数个字符,您的代码将有效地将 0 字符附加到十六进制字符串。

    除了使您的代码无法工作的原因之外,您还可以考虑采用不同的转换方法。例如,您可以创建一个 256 个字符的查找表,其中填充了一些无效值 (-1),除了对应于十六进制数字的字符,即 0..9、a..f 和 A​​..F。表中与这些字符对应的位置处的值将具有十六进制数字值,例如,aA 的索引处的 10。这仅适用于特定的单字节字符编码,如 ASCII,但在这种情况下,这可能不是一个严重的限制。使用查找表快速找到每个十六进制数字的值,然后将这些值用作半字节来构建字节。

    【讨论】:

    • 当我将返回的 NSData 设置为 UIImage 时 UIImage 为 nil
    猜你喜欢
    • 2014-02-24
    • 2017-12-30
    • 1970-01-01
    • 2013-06-16
    • 2013-05-07
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    相关资源
    最近更新 更多