iOS BCD码、数据流、字节和MD5计算

一、各个之间的相互转换

1、字符串转数据流NSData

    NSString *str = @"abc123";
    NSData *dd = [str dataUsingEncoding:NSUTF8StringEncoding];
    NSLog(@"%@",dd); // dd = <61626331 3233>

通过打印转换后的数据流可以看到,数据流里是两位一个字节存储字符串ASCII码的十六进制,a = 97 = 0x61,  1 = 49 = 0x31

2、字节与数据流转换

    Byte bb[] = {97,98,99,49,50,51};
    NSData *dd = [[NSData alloc]initWithBytes:bb length:6];
    NSLog(@"%@",dd);  // dd = <61626331 3233>   打印的结果和字符串转换是一样的

    //数据流转字节    Byte *bb = (Byte *)[dd bytes];

3、根据需要直接变成NSData,倒过来同理NSData转字符串也是先变成字节在转字符串

    NSString *bcdstr = @"616263313233";
    int leng = (int)bcdstr.length/2;
    if (bcdstr.length%2 == 1) //判断奇偶数
    {
        leng +=1;
    }
    Byte bbte[leng];
    for (int i = 0; i<leng-1; i++)
    {
        bbte[i] = (int)strtoul([[bcdstr substringWithRange:NSMakeRange(i*2, 2)]UTF8String], 0, 16);
    }
    if (bcdstr.length%2 == 1)
    {
        bbte[leng-1] = (int)strtoul([[bcdstr substringWithRange:NSMakeRange((leng - 1)*2, 1)]UTF8String], 0, 16) *16;
    }else
    {
        bbte[leng-1] = (int)strtoul([[bcdstr substringWithRange:NSMakeRange((leng - 1)*2, 2)]UTF8String], 0, 16);
    }
    NSData *de = [[NSData alloc]initWithBytes:bbte length:leng];
    NSLog(@"%@",de); //<61626331 3233>

二、MD5计算

1、字符串的MD5计算

+(NSString *)md5HexDigest:(NSString *)str
{
    const char *original_str = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH]; //16
    CC_MD5(original_str, (int)strlen(original_str), result);
    NSMutableString *hash = [NSMutableString string];
    for (int i = 0; i < 16; i++)
    {
        [hash appendFormat:@"%02x", result[i]];//两位表示 不足两位补0
    }
    return [hash lowercaseString];
}

2、字符串的MD5计算

+(NSString*)getMD5WithData:(NSData *)data
{
    //不要把数据流先转成char,不然如果遇到00字节就不会计算00后面数据
    unsigned char result[16];
    CC_MD5([data bytes], (int)[data length], result);
    NSMutableString *hash = [NSMutableString string];
    for (int i = 0; i < 16; i++)
    {
        [hash appendFormat:@"%02x", result[i]];//x就是小写的字母,X就是大写的字母,2个字节不足补0
    }
    return hash;
}
时间: 2024-10-19 18:18:43

iOS BCD码、数据流、字节和MD5计算的相关文章

一种BCD码转换的算法

1 #include "stdio.h" 2 3 typedef unsigned char uint8_t; 4 typedef unsigned short uint16_t; 5 typedef unsigned int uint32_t; 6 typedef unsigned long long uint64_t; 7 8 /** 9 ************************************************************************

BCD码

BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码,是用4位二进制数来表示1位十进制数中的0~9这10个数码,用一种使用二进制编码十进制的数字编码形式.BCD码这种编码形式利用四个位元来储存一个十进制的数码,从而使二进制和十进制之间的转换得以更加快捷地进行.相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免去使计算机作浮点运算时所耗费的时间.此外,对于其他需要高精确度的计算,BCD编码亦很常用. 由于十进制数共有0.1.2.…….9十个数码,

iOS之那几种加密 MD5加密.

前言: 好好活着,因为我们会死很久.---海腾 iOS之那几种加密 MD5加密.  接下来我们看代码 NSString+MD5.h   // // NSString+MD5.h // UI21_MD5加密 // // Created by JR_Rafael on 16/1/11. // Copyright © 2016年 lanou3g. All rights reserved. // #import <Foundation/Foundation.h> @interface NSString

BCD码与十进制

BCD码(Binary-Coded Decimal?)亦称二进码十进数或二-十进制代码.用4位二进制数来表示1位十进制数中的0~9这10个数码.是一种二进制的数字编码形式,用二进制编码的十进制代码.BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行.这种编码技巧最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算.相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间.此外,对于其他

BCD码干什么用的?

二进制编码的十进制(Binary Coded Decimal,BCD)数据类型在计算机系统中已经存在很久了.BCD格式经常用于简化对使用十进制数字的设备(比如必须向人显示数字的设备,如时钟和计时器)的处理.处理器不是把十进制数字转换为二进制数字以便进行数学操作,然后再转换回十进制:而是可以按照BCD格式保存数字并且执行数学操作.   BCD的名称就说明了它的作用,它按照二进制格式对十进制数字进行编码.每个BCD值都是一个无符号8位整数,值的范围是0到9.在BCD中,大于9的8位值被认为是非法的.

Cocos Creator 热更新文件MD5计算和需要注意的问题

Creator的热更新使用jsb.热更新基本按照 http://docs.cocos.com/creator/manual/zh/advanced-topics/hot-update.html?h=%E7%83%AD%E6%9B%B4%E6%96%B0这个官方教程, 以及https://github.com/cocos-creator/tutorial-hot-update这个官方示例就行.但是,有一些地方没有提及,这会导致热更出现的问题. 1.自己保存热更目录到localstorage,进入时

《python源码剖析-字节码和虚拟机》

|   分类于 python源码剖析  | https://fanchao01.github.io/blog/categories/python%E6%BA%90%E7%A0%81%E5%89%96%E6%9E%90/ https://fanchao01.github.io/blog/2014/12/26/python-GIL/ python源码剖析-字节码和虚拟机 发表于 2016-11-13   |   分类于 python源码剖析  | Python会将代码先编译成字节码,然后在虚拟机中动

一个Brushes笔画应用ios源码完整版

效果很不错的画笔App,提供几十种不同的画笔,包括毛笔画笔.拥有绘画App的一些基本功能,包括颜色选择.绘画保存,支持撤销(undo).重做(redo)以及橡皮擦功能等等,甚至还支持类似PhotoShop图层(layer)的功能(如第二张效果图).说明:应用的App Store地址:https://itunes.apple.com/app/id545366251.效果图: <ignore_js_op> <ignore_js_op> <ignore_js_op> <

十六进制和BCD码的区别

十六进制转二进制: 将每一位十六进制转化为4为二进制位即可. BCD码: 将十进制的每一位转化为4位二进制位即可. 方法都是将每一位转为4位二进制位,但是区别是一个对应的是十六进制,一个对应的是十进制.比如给出二进制数0101 0101 如果对应十六进制,则是0x55 如果对应BCD码,则是55(注意这里是十进制的55,上面是十六进制的55)