精华内容
下载资源
问答
  • + (NSData *) stringToHexData:(NSString *)hexStr {  int len = [hexStr length] / 2; // Target length  unsigned char *buf = malloc(len);  unsigned char *whole_byte = buf;... char byte_c
    + (NSData *) stringToHexData:(NSString *)hexStr
    {
        int len = [hexStr length] / 2;    // Target length
        unsigned char *buf = malloc(len);
        unsigned char *whole_byte = buf;
        char byte_chars[3] = {'\0','\0','\0'};
        
        int i;
        for (i=0; i < [hexStr length] / 2; i++) {
            byte_chars[0] = [hexStr characterAtIndex:i*2];
            byte_chars[1] = [hexStr characterAtIndex:i*2+1];
            *whole_byte = strtol(byte_chars, NULL, 16);
            whole_byte++;
        }
        
        NSData *data = [NSData dataWithBytes:buf length:len];
        free( buf );
        return data;
    }


    //data转换为十六进制的string
    + (NSString *)hexStringFromData:(NSData *)myD{
        
        Byte *bytes = (Byte *)[myD bytes];
        //下面是Byte 转换为16进制。
        NSString *hexStr=@"";
        for(int i=0;i<[myD length];i++)
            
        {
            NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数
            
            if([newHexStr length]==1)
                
                hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
            
            else
                
                hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
        }
        NSLog(@"hex = %@",hexStr);
        
        return hexStr;
    }
    展开全文
  • 最近解除了一个项目需要进行各种进制之间和类型的之间的转化,今天和大家分享一下,希望对大家有帮助 第一个就是NSData进行异或计算(^就代表异或操作),再高级语言中这种计算方式可以说是很陌生的,平常基本使用...

     

    最近解除了一个项目需要进行各种进制之间和类型的之间的转化,今天和大家分享一下,希望对大家有帮助

    第一个就是NSData进行异或计算(^就代表异或操作),再高级语言中这种计算方式可以说是很陌生的,平常基本使用不到今天分享一下计算过成

        __block uint8_t result = '\0' ;
        [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
            unsigned char *dataBytes = (unsigned char*)bytes;
            for (NSInteger i = 0; i < byteRange.length; i++) {
                uint8_t cha = dataBytes[i];
                //此处代码为异或操作复制到result中
                result^=cha;
            }
        }];

    将data放入该方法中,开始循环这个data.bytes内容,result就是最终结果。

    将10进制转16进制

    
    /**
     十进制转换十六进制
     
     @param decimal 十进制数
     @return 十六进制数
     */
    + (NSString *)getHexByDecimal:(NSInteger)decimal {
        
        NSString *hex =@"";
        NSString *letter;
        NSInteger number;
        for (int i = 0; i<9; i++) {
            
            number = decimal % 16;
            decimal = decimal / 16;
            switch (number) {
                    
                case 10:
                    letter =@"A"; break;
                case 11:
                    letter =@"B"; break;
                case 12:
                    letter =@"C"; break;
                case 13:
                    letter =@"D"; break;
                case 14:
                    letter =@"E"; break;
                case 15:
                    letter =@"F"; break;
                default:
                    letter = [NSString stringWithFormat:@"%ld", number];
            }
            hex = [letter stringByAppendingString:hex];
            if (decimal == 0) {
                
                break;
            }
        }
        return hex;
    }

    16进制形式的字符串转成16进制NSData类型

    
    /**
     将16进制类型的字符串转成16进制的NSData类型
    
     @param str 字符串
     @return nsdata
     */
    + (NSData *)convertHexStrToData:(NSString *)str{
        if (!str || [str length] == 0) {
            return nil;
        }
        
        NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];
        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;
    }

    例如:字符串:1D1E0E00A12F6951AD17DF003C4E 结果:<1d1e0e00 a12f6951 ad17df00 3c4e>

    将NSData转成可操作的字符串,十进制

    
    /**
     将NSData转成可操作的字符串,十进制
    
     @param data nsdata
     @return 转化结果
     */
    + (NSString *)sconvertDataToHexStr:(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进行异或计算

    
    /**
     异或计算(XOR)
    
     @param sourceData 第一个
     @param keyData 第二二
     @return 结果
     */
    + (NSData *)xor_EncodeData:(NSData *)sourceData withKey:(NSData *)keyData {
        Byte *keyBytes = (Byte *)[keyData bytes]; //取关键字的Byte数组, keyBytes一直指向头部
        Byte *sourceDataPoint = (Byte *)[sourceData bytes]; //取需要加密的数据的Byte数组
        for (long i = 0; i < [sourceData length]; i++) {
            sourceDataPoint[i] = sourceDataPoint[i] ^ keyBytes[i]; //然后按位进行异或运算
        }
        return sourceData;
    }
    

    再附上几个开发过程中常用到的小方法?

    MD5加密

    
    /**
     MD5加密
    
     @param password 密码
     @return 加密后的密码
     */
    + (NSString *)MD5StringWithPassWord:(NSString*)password {
        if ([password isKindOfClass:[NSString class]]) {
            NSString *str = (NSString *)password;
            const char *cStr = [str UTF8String];
            unsigned char result[16];
            CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
            return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7],result[8], result[9], result[10], result[11],result[12], result[13], result[14], result[15]] lowercaseString];
        }else{
            return nil;
        }
    }

    json字符串转成字典

    /**
     json转字典
    
     @param jsonString json
     @return 字典
     */
    + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString{
        if (jsonString == nil) {
            return nil;
        }
        NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
        NSError *err;
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                            options:NSJSONReadingMutableContainers
                                                              error:&err];
        if(err){
            NSLog(@"json解析失败:%@",err);
            return nil;
        }
        return dic;
    }
    

    将字典转json字符串

    
    /**
     将字典转成j字符串
    
     @param dict 字典
     @return 字符串
     */
    + (NSString *)convertToJsonData:(NSDictionary *)dict{
        NSError *error;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
        NSString *jsonString;
        if (!jsonData) {
            NSLog(@"%@",error);
        }else{
            jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
        }
        NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
        NSRange range = {0,jsonString.length};
        //去掉字符串中的空格
        [mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
        NSRange range2 = {0,mutStr.length};
        //去掉字符串中的换行符
        [mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
        return mutStr;
    }

     

    判断字符串是否为空

    
    /**
     判断字符串是否为空
    
     @param aStr 传入的内容
     @return YES 不是字符串
     */
    + (BOOL)isEmptyOrNull:(NSString *)aStr {
        if (![aStr isKindOfClass:[NSString class]]) {
            return YES;
        }
        if (!aStr) {
            return YES;
        }
        if ([aStr isKindOfClass:[NSNull class]]) {
            return YES;
        }
        if (!aStr.length) {
            return YES;
        }
        if (aStr == nil) {
            return YES;
        }
        if (aStr == NULL) {
            return YES;
        }
        NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
        NSString *trimmedStr = [aStr stringByTrimmingCharactersInSet:set];
        if (!trimmedStr.length) {
            return YES;
        }
        return NO;
    }
    

    判断数组是否为空

    
    /**
     判断数组是否为空
     
     @param arr 数组
     @return bool
     */
    +(BOOL)isEmptyArrOrNull:(NSMutableArray*)arr{
        if (![arr isKindOfClass:[NSMutableArray class]] || ![arr isKindOfClass:[NSArray class]]) {
            return YES;
        }
        if (arr == nil) {
            return YES;
        }
        if (arr.count == 0) {
            return YES;
        }
        if (arr == NULL) {
            return YES;
        }
        return NO;
    }

    判断字典是否为空

    
    /**
     判断字典是否为空
     
     @param dic 数组
     @return bool
     */
    +(BOOL)isEmptyDictionaryOrNull:(NSDictionary*)dic{
        if (dic == nil) {
            return YES;
        }
        if (![dic isKindOfClass:[NSDictionary class]]) {
            return YES;
        }
        if (dic.count == 0) {
            return YES;
        }
        if (dic == NULL) {
            return YES;
        }
        
        return NO;
    }
    

    判断手机是否是异形曲面屏iPhone X等,需要导入一个官方类#import <sys/utsname.h>

    
    /**
     判断手机是否是异形屏幕
     
     @return YES 是 异形屏幕
     */
    + (BOOL)iphoneIsProfiledScreen {
        struct utsname systemInfo;
        uname(&systemInfo);
        NSString*platform = [NSString stringWithCString: systemInfo.machine encoding:NSASCIIStringEncoding];
        if([platform isEqualToString:@"iPhone10,3"] || [platform isEqualToString:@"iPhone10,6"]  || [platform isEqualToString:@"iPhone11,8"] || [platform isEqualToString:@"iPhone11,2"] || [platform isEqualToString:@"iPhone11,6"] || [platform isEqualToString:@"iPhone11,4"] ) {
            return YES;
        } else {
            return NO;
        }
    }

    将数组转成字符串

    
    /**
     将数组转成字符串
    
     @param arrJson 数据
     @return 字符串
     */
    + (NSString *)jsonStringCompactFormatForNSArray:(NSArray *)arrJson {
        if (![arrJson isKindOfClass:[NSArray class]] || ![NSJSONSerialization isValidJSONObject:arrJson]) {
            return nil;
        }
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arrJson options:0 error:nil];
        NSString *strJson = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        return strJson;
    }

     

    展开全文
  • iOS 二进制数组16进制字符串

    千次阅读 2015-08-28 15:41:01
    iOS 二进制数组16进制字符串 Byte bytes[28]; [data getBytes:bytes length:28]; NSMutableString *hexString = [[NSMutableString alloc] init]; for (int i = 0; i ; i++) {

    iOS 二进制数组转成16进制字符串

     Byte bytes[28];
     [data getBytes:bytes length:28];
    
     NSMutableString *hexString = [[NSMutableString alloc] init];
     for (int i = 0; i < 28; i++) {
          NSLog(@"%hhu",bytes[i]);
          [hexString appendString:[NSString stringWithFormat:@"%0.2hhx", bytes[i]]];
     }
    
     NSLog(@" %@  ", hexString);
    

    字符串转二进制

    int len = [self length] / 2;    // Target length  
    unsigned char *buf = malloc(len)  
    unsigned char *whole_byte = buf;  
    char byte_chars[3] = {'\0','\0','\0'};  
    
    int i;  
    for (i=0; i < [self length] / 2; i++) {  
        byte_chars[0] = [self characterAtIndex:i*2];  
        byte_chars[1] = [self characterAtIndex:i*2+1];  
        *whole_byte = strtol(byte_chars, NULL, 16);  
        whole_byte++;  
    }  
    
    NSData *data = [NSData dataWithBytes:buf length:len];  
    free( buf );  
    return data; 
    
    展开全文
  • 先贴上代码: // // UDPDemoViewController.m // UDPDemo // // Created by Leo Lin on 3/12/14. ...// ...#import "UDPDemoViewController.h" ...现在发送的是文本格式,我想怎么才能16进制发送出去啊!
  • iOS16进制转nsdata

    2016-09-27 11:50:25
    //data转16 +(NSString *)DataToHexStr:(NSData *)data {  if (!data || [data length] == 0) {  return @"";  }  NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[d

    //data16

    +(NSString *)DataToHexStr:(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;

    }

    //16禁止转data

    +(NSData *)HexStrToData:(NSString *)str {

        if (!str || [str length] == 0) {

            return nil;

        }

        

        NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];

        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;

    }

    展开全文
  • iOS 16进制字符与NSData之间的转换

    千次阅读 2018-11-15 17:26:02
    #pragma mark - 十六进制转换工具 // 16进制转NSData - (NSData *)convertHexStrToData:(NSString *)str { if (!str || [str length] == 0) { return nil; } NSMutableData *hexData = [[NSMutableDa...
  • <div><p>///主要这里的data一开始看起来就是16进制,而不是一个字典明文,不太清楚这个16进制data如何加工得来? //未处理的data 字典 {"compression": "none", "transaction":...
  • iOS16数据转换成2进制字符串

    千次阅读 2015-10-25 20:28:59
    下面这个是将16进制转换成2进制数据 + (NSData *)hex2data:(NSString *)hex { NSMutableData *data = [NSMutableData dataWithCapacity:hex.length / 2]; unsigned char whole_byte; char byte_chars[3] = {'\0'...
  • 在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16进制(NSData)拆成2进制记录。这里我们研究下如何在他们之间进行转换。 ...
  • 先上代码再说o(* ̄︶ ̄*)o#pragma mark - check字段校验和 - (NSData *)checkFieldCheckout:(NSData *)... // data 16进制 NSString *originalStr = [requestTool hexStringFromData:originalData]; // 数组 ...
  • ios常见的数据转换

    2015-03-25 22:47:15
    自 [b][url]http://www.eoeit.cn/?post=40[/url][/b] 我们做移动支付常常需要各种数据编码,希望分享给大家有所帮助,代码在如下: NSString 转换成NSData 对象 ...NSData* xmlData = [@"...16进制字符...
  • iOS - 收到远程推送后的页面跳转

    千次阅读 2015-12-29 15:15:32
    获取deviceToken后要转换成16进制上传给服务器 以下是转换方法//把deviceToken变成16进制字符串 - (NSString *)getHEX:(NSData *)data { if (!data || [data length] == 0) { return @""; } NSMutableStr
  • iOS POS之8583报文组装工具

    千次阅读 2015-07-18 13:56:58
    在组装8583报文时会遇到各种转码,比如:ASCIIHex , data数据相应的16进制字符串。 在这里我把代码贴出来,当然了,我这份代码也是在各处搜集而来,并不是自己开发的。 @interface NSString (Trans) /**  ...
  • iOS 以byte数组作为密钥的3des加密

    千次阅读 2015-08-15 16:22:25
    最近做3des加密的时候,服务器返回的byte数组作为密钥,网上的方法都是以字符串作为密钥。...首先 对密钥字符串进行处理,把16进制字符串转换为byte数组(nadata)- (NSData *) stringToHexData { int len =
  • json不支持8进制和16进制数值转换。 #include "json/json.h" Json::Reader reader; Json::Value root; std::ifstream in("/data/shared/dtc_info.json", std::ios::binary); if(!in.is_open()) { ALOGE(...
  • 不透明度16进制值 手机To电脑同步预览工具 Gif图片录制工具 UI Programming Language Tutorials Games Guides Android设计指南非官方简体中文版 Android Cheatsheet for Graphic Designers Google Material ...
  • 16章:string类和标准模板库 本章将讨论C++语言中新增的一些类库。对于传统的C-风格字符串来说,string类是一种方便且功能强大的 替代方式。autoptr类帮助管理动态分配的内存。STL提供了几种类容器(包括数组、...
  • 16章:string类和标准模板库 本章将讨论C++语言中新增的一些类库。对于传统的C-风格字符串来说,string类是一种方便且功能强大的 替代方式。autoptr类帮助管理动态分配的内存。STL提供了几种类容器(包括数组、...
  • 16章:string类和标准模板库 本章将讨论C++语言中新增的一些类库。对于传统的C-风格字符串来说,string类是一种方便且功能强大的 替代方式。autoptr类帮助管理动态分配的内存。STL提供了几种类容器(包括数组、...
  • 到交互模式 (在命令行上提供文件时,它不是默认模式). -m --module 加载为ES6模块(默认为.mjs文件扩展名)。 高级选项包括: -d --dump 转存内存使用情况统计信息。 -q --quit 只是实例化解释器并退出。 2.3.2 ...
  • 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
  • java开源包12

    热门讨论 2013-06-28 10:14:45
    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
  • Java资源包01

    2016-08-31 09:16:25
    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
  • java开源包101

    2016-07-13 10:11:08
    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
  • java开源包11

    热门讨论 2013-06-28 10:10:38
    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
  • java开源包6

    热门讨论 2013-06-28 09:48:32
    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...
  • java开源包10

    热门讨论 2013-06-28 10:06:40
    Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

data转16进制ios