包含十六进制的NSString转换为ascii等效 [英] NSString containing hex convert to ascii equivalent

查看:157
本文介绍了包含十六进制的NSString转换为ascii等效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个NSString,它有十六进制信息,如

pre code> 00000020 $ b

来自NSData。我需要做的是将十六进制数据的NSString转换为Ascii,这将是:

  [0] [0] [0 ] ftypM4A [0] [0] [0] [0] M4A mp42isom [0] [0] [0] [0] [0] [3] [18] [3] 

正如你可能会知道这是一个M4A文件。我使用NSFileHandle将文件的第一部分加载到NSData中。然后我将它存储到NSString中:

  NSData * data = [filehandle readDataOfLength:1000]; 
NSString * str = [[NSString alloc] initWithString:[NSString stringWithFormat:@%@,data]];

任何人都知道如何直接转换NSData或将NSString转换为ascii?谢谢!

解决方案

您应该做这样的事情:

  NSData * _data = // ...任何
NSMutableString * _string = [NSMutableString stringWithString:@];
for(int i = 0; i< _data.length; i ++){
unsigned char _byte;
[_data getBytes:& _byte range:NSMakeRange(i,1)];
if(_byte> = 32&& _byte< 127){
[_string appendFormat:@%c,_byte];
} else {
[_string appendFormat:@[%d],_byte];
}
}
NSLog(@%@,_string);


I have an NSString that has hex information such as

<00000020 66747970 4d344120 00000000 4d344120 6d703432 69736f6d 00000000 00031203

which came from NSData. What I need to do is convert that NSString of Hex data to Ascii which would be:

[0][0][0] ftypM4A [0][0][0][0]M4A mp42isom[0][0][0][0][0][3][18][3] 

As you might be able to tell this is a M4A file. I loaded the first part of the file in to NSData using NSFileHandle. I then stored it into NSString:

NSData *data = [filehandle readDataOfLength:1000];
NSString *str = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%@",data]];

Anyone know how to convert NSData directly or convert the NSString to ascii? Thanks!

解决方案

you should have done something like this:

NSData *_data = // ... whatever
NSMutableString *_string = [NSMutableString stringWithString:@""];
for (int i = 0; i < _data.length; i++) {
    unsigned char _byte;
    [_data getBytes:&_byte range:NSMakeRange(i, 1)];
    if (_byte >= 32 && _byte < 127) {
        [_string appendFormat:@"%c", _byte];
    } else {
        [_string appendFormat:@"[%d]", _byte];
    }
}
NSLog(@"%@", _string);

这篇关于包含十六进制的NSString转换为ascii等效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆