• @implementation NSString (StringToHexData)    //  // Decodes an NSString containing hex encoded bytes into an NSData object  //  - (NSData *) stringToHexData  ...
    1. @implementation NSString (StringToHexData)  
    2.   
    3. //  
    4. // Decodes an NSString containing hex encoded bytes into an NSData object  
    5. //  
    6. - (NSData *) stringToHexData  
    7. {  
    8.     int len = [self length] / 2;    // Target length  
    9.     unsigned char *buf = malloc(len)  
    10.     unsigned char *whole_byte = buf;  
    11.     char byte_chars[3] = {'\0','\0','\0'};  
    12.   
    13.     int i;  
    14.     for (i=0; i < [self length] / 2; i++) {  
    15.         byte_chars[0] = [self characterAtIndex:i*2];  
    16.         byte_chars[1] = [self characterAtIndex:i*2+1];  
    17.         *whole_byte = strtol(byte_chars, NULL, 16);  
    18.         whole_byte++;  
    19.     }  
    20.   
    21.     NSData *data = [NSData dataWithBytes:buf length:len];  
    22.     free( buf );  
    23.     return data;  
    24. }  
    25. @end  
    26. @implementation NSData (DataToHexString)  
    27.   
    28. - (NSString *) dataToHexString  
    29. {  
    30.     NSUInteger          len = [self length];  
    31.     char *              chars = (char *)[self bytes];  
    32.     NSMutableString *   hexString = [[NSMutableString alloc] init];  
    33.   
    34.     for(NSUInteger i = 0; i < len; i++ )  
    35.         [hexString appendString:[NSString stringWithFormat:@"%0.2hhx", chars[i]]];  
    36.   
    37.     return hexString;  
    38. }  
    39. @end  
    展开全文
  • 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; 
    
    展开全文
  • * @brief 将二进制数据转化为用字符表示的16进制数 * * @param data 二进制数据 * * @return 字符表示的16进制数 */ -(NSString *)HexStringWithData:(NSData *)data{ Byte *bytes = (Byte *)[data bytes]; ...
    由于项目需要跟进安卓端的16进制二维码段合法性验证,故根据安卓端部分java代码改编为oc代码。
    
    /**
     *    @brief    将二进制数据转化为用字符表示的16进制数
     *
     *    @param     data 二进制数据
     *
     *    @return    字符表示的16进制数
     */
    -(NSString *)HexStringWithData:(NSData *)data{
        Byte *bytes = (Byte *)[data bytes];
        NSString *hexStr=@"";
        for(int i=0;i<[data 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];
            }    
        }
        hexStr = [hexStr uppercaseString];
        return hexStr;
    }
    
    -(Byte)toByte:(char)c {
        Byte b = (Byte)[@"0123456789ABCDEF" rangeOfString:[NSString stringWithFormat:@"%c", c]].location;
        return b;
    }
    /**
     *  演算CRC
     *  @param str
     */
    -(NSString *)generateCRC:(NSString *)str{
        //把16进制字符串转换成字节数组
        long len = ([str length]/   2);
        Byte result[len];
        char achar[[str length]];
        memcpy(achar, [[str uppercaseString] cStringUsingEncoding:NSASCIIStringEncoding], 2*[[str uppercaseString] length]);
        for (int i = 0; i<len; i++) {
            int pos = i *2;
            result[i] = (Byte)([self toByte:achar[pos]] <<   4 | [self toByte:achar[pos+1]]);
            NSLog(@"result[i]:%d",result[i]);
        }
    
        Byte check[1];
        NSString *hexStr=@"";
        for (int i = 0; i<len; i++) {
            if (i == 0) {
                check[0] = result[0];
            }else{
                check[0] ^=result[i];
            }
        }
        NSLog(@"check[0]:%d",check[0]);
    
        NSData *adata = [[NSData alloc] initWithBytes:check length:1];
        hexStr = [self HexStringWithData:adata];
        hexStr = [hexStr uppercaseString];
        return hexStr;
    }
    

    附:java部分源代码

    private static byte toByte(char c) {
            byte b = (byte) "0123456789ABCDEF".indexOf(c);
            return b;
        }
         /**
         * 把16进制字符串转换成字节数组
         * 
         * @param hex
         *            16进制字符串
         * @return 字节数组
         */
        public static byte[] hexStringToByte(String hex) {
    
            int len = (hex.length() /   2);
            byte[] result = new byte[len];
            char[] achar = hex.toUpperCase().toCharArray();
            for (int i =   0; i < len; i++) {
                int pos = i *   2;
                result[i] = (byte) (toByte(achar[pos]) <<   4 | toByte(achar[pos +   1]));
            }
            return result;
        }
        /**
         * 把字节数组转换成16进制字符串
         * 
         * @param bArray
         *            字节数组
         * @return 字符串
         */
        public static final String bytesToHexString(byte[] bArray) {
            if (bArray == null)
                return "";
            StringBuffer sb = new StringBuffer(bArray.length);
            String sTemp;
            for (int i =   0; i < bArray.length; i++) {
                sTemp = Integer.toHexString(0xFF & bArray[i]);
                if (sTemp.length() <   2)
                    sb.append(  0);
                sb.append(sTemp.toUpperCase());
            }
            return sb.toString();
        }
         /**
         * 演算crc
         * @param str
         * @return
         */
        public static String generateCRC(String str)
        {
            byte[] bytes = hexStringToByte(str);
            for(int i = 0;i<bytes.length;i++){
                System.out.println("---"+bytes[i]);
            }
            byte[] check = new byte[1];
            for(int i = 0;i<bytes.length;i++)
            {
                if(i == 0)
                {
                    check[0] = bytes[0];
                }else
                {
                    check[0] ^= bytes[i];
                }
            }
            for(int i = 0;i<check.length;i++){
                System.out.println(check[i]);
                System.out.println(bytesToHexString(check));
            }
    
            return bytesToHexString(check);
        }
    
    展开全文
  • - (NSData *) stringToHexData { int len = [self length] / 2; // Target length unsigned char *buf = (unsigned char *)malloc(len); unsigned char *whole_byte = buf; char byte_chars[3] =...

    - (NSData *) stringToHexData
    {
        int len = [self length] / 2;    // Target length
        unsigned char *buf = (unsigned char *)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;
    }

    展开全文
  • 16进制字符串转换成16进制数,返回NSData类型的数据 - (NSData *)transformSignString:(NSString *)hexString{  int j=0;  NSInteger desLength = hexString.length/2;  if (hexString...

    将16进制字符串转换成16进制数,返回NSData类型的数据


    - (NSData *)transformSignString:(NSString *)hexString{


        int j=0;

        NSInteger desLength = hexString.length/2;

        if (hexString.length%2 != 0) {

            

            return nil;

        }

        Byte bytes[desLength]; ///3ds keyByte 数组, 128

        for(int i=0;i<[hexString length];i++)

        {

            int int_ch; /// 两位16进制数转化后的10进制数

            unichar hex_char1 = [hexString characterAtIndex:i]; ////两位16进制数中的第一位(高位*16)

            int int_ch1;

            if(hex_char1 >= '0' && hex_char1 <='9')

                int_ch1 = (hex_char1-48)*16;   //// 0 Ascll - 48

            else if(hex_char1 >= 'A' && hex_char1 <='F')

                int_ch1 = (hex_char1-55)*16; //// A Ascll - 65

            else

                int_ch1 = (hex_char1-87)*16; //// a Ascll - 97

            i++;

            unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位)

            int int_ch2;

            if(hex_char2 >= '0' && hex_char2 <='9')

                int_ch2 = (hex_char2-48); //// 0 Ascll - 48

            else if(hex_char2 >= 'A' && hex_char2 <='F')

                int_ch2 = hex_char2-55; //// A Ascll - 65

            else

                int_ch2 = hex_char2-87; //// a Ascll - 97

            

            

            int_ch = int_ch1+int_ch2;

            NSLog(@"int_ch=%d",int_ch);

            bytes[j] = int_ch;  ///将转化后的数放入Byte数组里

            j++;

        }

        NSData *newData = [[NSData alloc] initWithBytes:bytes length:desLength];

        NSLog(@"newData=%@",newData);

        return newData;

    }

    展开全文
  • 16进制有符号判断正负其实是将16进制转为2进制看...这样我们可以这样想,我们不管这个16进制数是有符号还是无符号,我们都按无符号计算出来得到当前16进制数的无符号正数A,然后算出这个16进制数的-0也就是0X80.....
  • 1.二进制数据成字典 NSData *jsonData ; NSDictionary *dicJson=[NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil]; 2.字典二进制...
  • Byte数组-> NSData Byte byte[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}; NSData *adata = [[NSData alloc] initWithBytes:byte length:24...Byte数组->16进制数 Byte *bytes = (Byte
  • UIImage *licenseImg = [self.licenseImgAry objectAtIndex:0]; NSData *licenseData = UIImageJPEGRepresentation(licenseImg, 0.7f); Byte *bytes = (Byte *)[licenseDat
  • 把一串16进制数-[UInt8],例如 01 10 CD 成字符串-String "0110CD",代码如下: func bytesToStr(bytes:[UInt8]) -> String { var hexStr = "" for index in 0 ..< bytes.count { var Str = bytes...
  • 原文网址:... /// 将十六进制的字符串转化为NSData - (NSData )transStrHexToData:(NSString )strHex { /// bytes索引 NSUInteger j = 0; NSInteger len = strHex.length;...
  • 原文站点:https://senitco.github.io/2017/06/07/string-processing/  C/C++处理十六进制和字符串小结,包括十六进制数组和字符串的相互转换,二进制字符串和十六进制数组的转换,不定长字符串的读取等。...
  • Java版:private static byte charToByte(char c) { return (byte) "0123456789ABCDEF".indexOf(c); } public static String bytesToHexString(byte[] src){ StringBuilder stringBuilder = ...
  • 在以下的代码中,我们将写入一个double数组到1.txt中,并且读取出来。 主要采用了fstream这个库,代码如下: #include #include #include int main(){ const int length = 100; double f1[length] ; for...
  • iOS开发时间戳与时间,时区的转换,汉字与UTF8,16进制的转换  (2013-07-19 15:56:13) 转载▼ 标签:  ios时间戳   ios开发时间戳   ios16进制转中文   ios开发utf8中文 ios...
  • 最近解除了一个项目需要进行各种进制之间和类型的之间的转化,今天和大家分享一下,希望对大家有帮助 第一个就是NSData进行异或计算(^就代表异或操作),再高级语言中这种计算方式可以说是很陌生的,平常基本使用...
  • 简 书:http://www.jianshu.com/p/e9f8af1ab76f导读前段时间在做智能家居项目(ZigBee),使用UDP通信协议控制智能家居,比如说调节LED灯的亮度。在通信部分我使用了CocoaAsyncSocket这个非常主流的开源库,发送和...
1 2 3 4 5 ... 20
收藏数 9,104
精华内容 3,641
关键字:

16进制数转二进制数组 ios