iOS 字符串轉(zhuǎn)16進(jìn)制 16進(jìn)制轉(zhuǎn)NSData

字符串轉(zhuǎn)16進(jìn)制 16進(jìn)制轉(zhuǎn)字符串

測(cè)試網(wǎng)站 http://www.bejson.com/convert/ox2str/


//e8afb7e58187e58d95313532373836e8bf98e8819ae9a490666a68676a736a6a646a64
//請(qǐng)假單152786還聚餐fjhgjsjjdjd


//普通字符串轉(zhuǎn)換為十六進(jìn)制的。

- (NSString *)hexStringFromString:(NSString *)string{
    NSData *myD = [string dataUsingEncoding:NSUTF8StringEncoding];
    Byte *bytes = (Byte *)[myD bytes];
    //下面是Byte 轉(zhuǎn)換為16進(jìn)制。
    NSString *hexStr=@"";
    for(int i=0;i<[myD length];i++)
    {
        NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16進(jìn)制數(shù)
        if([newHexStr length]==1)
            hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
        else
            hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr]; 
    } 
    return hexStr; 
}


// 十六進(jìn)制轉(zhuǎn)換為普通字符串的。
- (NSString *)stringFromHexString:(NSString *)hexString { 
    
    char *myBuffer = (char *)malloc((int)[hexString length] / 2 + 1);
    bzero(myBuffer, [hexString length] / 2 + 1);
    for (int i = 0; i < [hexString length] - 1; i += 2) {
        unsigned int anInt;
        NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, 2)];
        NSScanner * scanner = [[NSScanner alloc] initWithString:hexCharStr];
        [scanner scanHexInt:&anInt];
        myBuffer[i / 2] = (char)anInt;
    }
    NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:4];
    NSLog(@"------字符串=======%@",unicodeString);
    return unicodeString;
}



16進(jìn)制轉(zhuǎn)NSData NSData轉(zhuǎn)16進(jìn)制


// 16進(jìn)制轉(zhuǎn)NSData
- (NSData *)convertHexStrToData:(NSString *)str
{
    if (!str || [str length] == 0) {
        return nil;
    }
    
    NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:20];
    NSRange range;
    if ([str length] % 2 == 0) {
        range = NSMakeRange(0, 2);
    } else {
        range = NSMakeRange(0, 1);
    }
    for (NSInteger i = range.location; i < [str length]; i += 2) {
        unsigned int anInt;
        NSString *hexCharStr = [str substringWithRange:range];
        NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];
        
        [scanner scanHexInt:&anInt];
        NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];
        [hexData appendData:entity];
        
        range.location += range.length;
        range.length = 2;
    }
    return hexData;
}

 // NSData轉(zhuǎn)16進(jìn)制 第一種
- (NSString *)convertDataToHexStr:(NSData *)data
{
    if (!data || [data length] == 0) {
        return @"";
    }
    NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];
    
    [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
        unsigned char *dataBytes = (unsigned char*)bytes;
        for (NSInteger i = 0; i < byteRange.length; i++) {
            NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
            if ([hexStr length] == 2) {
                [string appendString:hexStr];
            } else {
                [string appendFormat:@"0%@", hexStr];
            }
        }
    }];
    return string;
}


// NSData轉(zhuǎn)16進(jìn)制 第二種
-(NSString *)hexStringFormData:(NSData *)data
{
    return [[[[NSString stringWithFormat:@"%@",data]
            stringByReplacingOccurrencesOfString:@"<" withString:@""]
            stringByReplacingOccurrencesOfString:@">" withString:@""]
            stringByReplacingOccurrencesOfString:@" " withString:@""];
    
    

}

問題

  • 在bejson網(wǎng)站測(cè)試的 換行的字符串 轉(zhuǎn)成的 16進(jìn)制進(jìn)制
16進(jìn)制到文本字符串的轉(zhuǎn)換
換行
在線實(shí)時(shí)轉(zhuǎn)換

用網(wǎng)站轉(zhuǎn)成

3136e8bf9be588b6e588b0e69687e69cace5ad97e7aca6e4b8b2e79a84e8bdace68da2ae68da2e8a18cae59ca8e7babfe5ae9ee697b6e8bdace68da2

用代碼 stringFromHexString不能把這個(gè)16進(jìn)制再轉(zhuǎn)回來

  • 在代碼設(shè)置 \n換行 是可以識(shí)別 并轉(zhuǎn)換的
16進(jìn)制到文本字符串的轉(zhuǎn)換\n換行\(zhòng)n在線實(shí)時(shí)轉(zhuǎn)換

用代碼hexStringFromString 轉(zhuǎn)成

3136e8bf9be588b6e588b0e69687e69cace5ad97e7aca6e4b8b2e79a84e8bdace68da20ae68da2e8a18c0ae59ca8e7babfe5ae9ee697b6e8bdace68da2

用代碼stringFromHexString回轉(zhuǎn)

16進(jìn)制到文本字符串的轉(zhuǎn)換
換行
在線實(shí)時(shí)轉(zhuǎn)換
  • 分析對(duì)照下

發(fā)現(xiàn)之所以轉(zhuǎn)不過來,是因?yàn)閾Q行符不一樣 a0a

3136e8bf9be588b6e588b0e69687e69cace5ad97e7aca6e4b8b2e79a84e8bdace68da2
a
e68da2e8a18c
a
e59ca8e7babfe5ae9ee697b6e8bdace68da2
3136e8bf9be588b6e588b0e69687e69cace5ad97e7aca6e4b8b2e79a84e8bdace68da2
0a
e68da2e8a18c
0a
e59ca8e7babfe5ae9ee697b6e8bdace68da2

中文字符串轉(zhuǎn)NSData GBK 和 UTF-8

NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSData *valData = [hextext dataUsingEncoding:enc];

待補(bǔ)充


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容