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[] = {,,,,,};
NSData *dd = [[NSData alloc]initWithBytes:bb length:];
NSLog(@"%@",dd); // dd = <61626331 3233> 打印的结果和字符串转换是一样的 //数据流转字节
Byte *bb = (Byte *)[dd bytes];
3、根据需要直接变成NSData,倒过来同理NSData转字符串也是先变成字节在转字符串
NSString *bcdstr = @"";
int leng = (int)bcdstr.length/;
if (bcdstr.length% == ) //判断奇偶数
{
leng +=;
}
Byte bbte[leng];
for (int i = ; i<leng-; i++)
{
bbte[i] = (int)strtoul([[bcdstr substringWithRange:NSMakeRange(i*, )]UTF8String], , );
}
if (bcdstr.length% == )
{
bbte[leng-] = (int)strtoul([[bcdstr substringWithRange:NSMakeRange((leng - )*, )]UTF8String], , ) *;
}else
{
bbte[leng-] = (int)strtoul([[bcdstr substringWithRange:NSMakeRange((leng - )*, )]UTF8String], , );
}
NSData *de = [[NSData alloc]initWithBytes:bbte length:leng];
NSLog(@"%@",de); //<61626331 3233>
4、十六进制转成ASCII
//十六进制转ASCII 31 = 1 44 = D
-(NSString *)stringFromHexString:(NSString *)hexString
{
char *myBuffer = (char *)malloc((int)[hexString length] / + );
bzero(myBuffer, [hexString length] / + );
for (int i = ; i < [hexString length] - ; i += ) {
unsigned int anInt;
NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, )];
NSScanner * scanner = [[NSScanner alloc] initWithString:hexCharStr] ;
[scanner scanHexInt:&anInt];
myBuffer[i / ] = (char)anInt;
}
NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:];
return unicodeString;
}
二、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 = ; i < ; i++)
{
[hash appendFormat:@"%02x", result[i]];//两位表示 不足两位补0
}
return [hash lowercaseString];
}
2、字符串的MD5计算
+(NSString*)getMD5WithData:(NSData *)data
{
//不要把数据流先转成char,不然如果遇到00字节就不会计算00后面数据
unsigned char result[];
CC_MD5([data bytes], (int)[data length], result);
NSMutableString *hash = [NSMutableString string];
for (int i = ; i < ; i++)
{
[hash appendFormat:@"%02x", result[i]];//x就是小写的字母,X就是大写的字母,2个字节不足补0
}
return hash;
}
三、CRC16验证计算(需要一个头文件)
+(NSData *)crc16Digest:(NSData *)data
{
Byte *bs = (Byte *)[data bytes];
int len = (int)data.length;
unsigned char acc[len]; for (int i = ; i<len; i++)
{
acc[i] =bs[i];
}
unsigned short intup = CRC16(acc, len); //调用这个要导入1个头文件
NSString *str = [[NSString alloc]initWithFormat:@"%x",intup];
int b = -(int)str.length;
NSString *ss=[NSString new];
for (int i =; i<b; i++){
ss = [NSString stringWithFormat:@"0%@",ss];
}
ss = [NSString stringWithFormat:@"%@%@",ss,str];
//高低位转换
NSString *stra = [ss substringToIndex:];
NSString *end = [ss substringFromIndex:];
NSString *yy = [NSString stringWithFormat:@"%@%@",end,stra];
NSData *rrdata = [SingMent transcodebcd:yy];
return rrdata;
}
iOS BCD码、数据流、字节和MD5计算的更多相关文章
- 一种BCD码转换的算法
#include "stdio.h" typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef ...
- php UTF8 转字节数组,后使用 MD5 计算摘要
Hex.encodeHexString(md5.digest);按 UTF8 转字节数组,后使用 MD5 计算摘要,得到 16 字节数组,使用 Hex 转为长度为 32 的字符串,保持小写 bin2h ...
- Delphi中对BCD码的直接支持 (转)
最近在Delphi下写软件,需要将数据转换为BCD码和将BCD码转换为其它数据类型,从网上搜索了一下,没有发现好的函数,于是就想自定义函数来完成BCD与其它格式的数据转换功能.但最终没有动手写,先查查 ...
- C语言之linux内核--BCD码转二进制与二进制转BCD码(笔试经典)
在分析代码之前,我们先来了解一下,BCD码和二进制到底区别在哪? 学习过计算机原理的和数字电子技术这两门课的都会知道这两个到底是什么含义,也有的同学学过了,考过了,过了一段时间又忘记了,今天,我们通过 ...
- 二进制 转换成十进制 BCD码(加3移位法)
"原来的二进制数十几位,则左移时就要左移几位" "二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位 ...
- BCD码
BCD码(Binary-Coded Decimal)亦称二进码十进数或二-十进制代码,是用4位二进制数来表示1位十进制数中的0~9这10个数码,用一种使用二进制编码十进制的数字编码形式.BCD码这种 ...
- 汇编_压缩BCD码和非压缩BCD码
BCD码是表示十进制数的,非压缩BCD码是用8位表示的,其实只用低4位,高4位全为0. 例如,十进制数36,用非压缩BCD码表示为:0000 0011 0000 0110 ,这是两个字节. 压缩BCD ...
- Cocos Creator 热更新文件MD5计算和需要注意的问题
Creator的热更新使用jsb.热更新基本按照 http://docs.cocos.com/creator/manual/zh/advanced-topics/hot-update.html?h=% ...
- S5Time BCD码存储
,时基为1秒. 当使用S5TIME时,定义数值的范围为0~999,而且要指明使用的时基.时基指定了时间单位. S5TIME时基及相应的时间范围如下: 时基 BCD码 时间范围 10 ms 00 10 ...
随机推荐
- Python 学习 第五篇:语句和语法
Python程序是语句构成的,语句包含表达式,表达式嵌套在语句中,包含变量和常量,用于处理对象.Python的语法实质上是由表达式.语句和代码块构成的.语句是由表达式构成的,代码块是由多个语句构成的复 ...
- .Net Core和.Net Standard直观理解
.NET framework和.NET Core里面有一些部分,内容是相同的. 这部分相同的内容,就被称为标准库...即NET Standard Library. 而那些不同的部分,则分别叫做.NET ...
- 从hs_strcpy谈安全——缓冲区溢出
对于大多数的博友来说,hs_strcpy一定会很陌生,因为这个hs_strcpy这个关键字和我的工作有挂钩.本来目前就职于恒生电子,hs_strcpy是中间件中公司定义的字符串拷贝方法,在工作业余之余 ...
- 小程序与WebRTC联姻能擦出怎样的火花?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯视频云终端团队发表于云+社区专栏 腾讯视频云终端技术总监,rexchang(常青), 2008 年毕业加入腾讯,一直从事客户端研发 ...
- Docker Zero Deployment and Secrets (二)
一. 健康检测: (1)定义检测信息如下(案例,在Dockerfile中定义) FROM alpine:3.6 ... HEALTHCHECK --interval=30s \ --timeo ...
- 使用Python批量修改数据库执行Sql文件
由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也算低了,且都是些 ...
- Hadoop Streaming框架使用(二)
上一篇文章介绍了Streaming的各种参数,本文具体介绍使用方法. 提交hadoop任务示例: $HADOOP_HOME/bin/hadoop streaming \ -input /user/te ...
- 关于inherit的笔记
1. inherit是动态的 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- 以符合人类阅读的方式打印php数组【转载】
在程序开发过程中:打印数据进行查看调试是非常频繁的:如果没有一种易于阅读的样式那是相当痛苦的: 先定义一个数组: 1 2 3 4 5 6 7 8 9 $array=array( 't0'=&g ...
- 互评beta版本 - 探路者【贪吃蛇】
基于NABCD评论,及改进建议 1)N(Need 需求) 开发本软件一方面是为了让80,90后用户重温童年的美好记忆,另一方面也是为了增加对英语学习兴趣较弱.意志力薄弱的中小学生学习英语的兴趣和动力, ...