[Objective-c]NSData to long、unsigned、hexstring

  • 6492
  • 0

同文分享於 Code Snippet

之前處理一些基本的bytes <-> int、long、hexString,
在此作個整理與分享

同文分享於 Code Snippet

之前處理一些基本的bytes <-> int、long、hexString,
在此作個整理與分享

+(NSData *) LongToNSData:(long long)data
{
    Byte *buf = (Byte*)malloc(8);
    for (int i=7; i>=0; i--) {
        buf[i] = data & 0x00000000000000ff;
        data = data >> 8;
    }
     
    NSData *result =[NSData dataWithBytes:buf length:8];
    return result;
}
 
//unsigned
+(uint32_t) NSDataToUInt:(NSData *)data
{
    unsigned char bytes[4];
    [data getBytes:bytes length:4];
    uint32_t n = (int)bytes[0] << 24;
    n |= (int)bytes[1] << 16;
    n |= (int)bytes[2] << 8;
    n |= (int)bytes[3];
    return n;
}
 
//十六進位字串轉bytes,可以設定size,padding在左邊
+(NSData *) hexStrToNSData:(NSString *)data withSize:(NSInteger)size
{
    int add = size*2 - data.length;
     
    if (add > 0) {
        NSString* tmp = [[NSString string] stringByPaddingToLength:add withString:@"0" startingAtIndex:0];
        data = [tmp stringByAppendingString:data];
    }
     
    return [self hexStrToNSData:data];
}
 
//十六進位字串轉bytes
+(NSData *) hexStrToNSData:(NSString *)hexStr
{
    NSMutableData* data = [NSMutableData data];
    int idx;
    for (idx = 0; idx+2 <= hexStr.length; idx+=2) {
        NSRange range = NSMakeRange(idx, 2);
        NSString* ch = [hexStr substringWithRange:range];
        NSScanner* scanner = [NSScanner scannerWithString:ch];
        unsigned int intValue;
        [scanner scanHexInt:&intValue];
        [data appendBytes:&intValue length:1];
    }
    return data;
}
 
//bytes轉十六進位字串,不是base64哦,別搞混了
+(NSString *) NSDataToHexString:(NSData *)data
{
    if (data == nil) {
        return nil;
    }
    NSMutableString* hexString = [NSMutableString string];
    const unsigned char *p = [data bytes];
    for (int i=0; i < [data length]; i++) {
        [hexString appendFormat:@"%02x", *p++];
    }
    return hexString;
}