一、各个之间的相互转换

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计算的更多相关文章

  1. 一种BCD码转换的算法

    #include "stdio.h" typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef ...

  2. php UTF8 转字节数组,后使用 MD5 计算摘要

    Hex.encodeHexString(md5.digest);按 UTF8 转字节数组,后使用 MD5 计算摘要,得到 16 字节数组,使用 Hex 转为长度为 32 的字符串,保持小写 bin2h ...

  3. Delphi中对BCD码的直接支持 (转)

    最近在Delphi下写软件,需要将数据转换为BCD码和将BCD码转换为其它数据类型,从网上搜索了一下,没有发现好的函数,于是就想自定义函数来完成BCD与其它格式的数据转换功能.但最终没有动手写,先查查 ...

  4. C语言之linux内核--BCD码转二进制与二进制转BCD码(笔试经典)

    在分析代码之前,我们先来了解一下,BCD码和二进制到底区别在哪? 学习过计算机原理的和数字电子技术这两门课的都会知道这两个到底是什么含义,也有的同学学过了,考过了,过了一段时间又忘记了,今天,我们通过 ...

  5. 二进制 转换成十进制 BCD码(加3移位法)

    "原来的二进制数十几位,则左移时就要左移几位" "二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位 ...

  6. BCD码

    BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码,是用4位二进制数来表示1位十进制数中的0~9这10个数码,用一种使用二进制编码十进制的数字编码形式.BCD码这种 ...

  7. 汇编_压缩BCD码和非压缩BCD码

    BCD码是表示十进制数的,非压缩BCD码是用8位表示的,其实只用低4位,高4位全为0. 例如,十进制数36,用非压缩BCD码表示为:0000 0011 0000 0110 ,这是两个字节. 压缩BCD ...

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

    Creator的热更新使用jsb.热更新基本按照 http://docs.cocos.com/creator/manual/zh/advanced-topics/hot-update.html?h=% ...

  9. S5Time BCD码存储

    ,时基为1秒. 当使用S5TIME时,定义数值的范围为0~999,而且要指明使用的时基.时基指定了时间单位. S5TIME时基及相应的时间范围如下: 时基 BCD码 时间范围 10 ms 00 10 ...

随机推荐

  1. Git的原理简介和常用命令

    Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调 ...

  2. Object C学习笔记7-字符串NSString之一

    在Object C中存在两个类用于操作字符串,NSString和NSMutableString;NSString在赋值之后不能修改其内容和长度,而NSMutableString可以动态的修改字符串内容 ...

  3. 如何用python获取文件中的某一行——python小技巧

    很多人有的时候只需要获取文章中的固定的一行,那么我知道这一行,我需要怎么样去获取呢 可能会有人说读取这一行,如果这一行是已什么开头的就读出来, 其实还有一种办法,就是我知道文件的路径.知道我要取的行数 ...

  4. java学习(三)类、实例

    类 public class Dog{ String breed; int age; String color; void barking(){ } void hungry(){ } void sle ...

  5. ASN.1编码方式详解

    ASN ASN.1 – Abstract Syntax Notation dot one,抽象记法1.数字1被ISO加在ASN的后边,是为了保持ASN的开放性,可以让以后功能更加强大的ASN被命名为A ...

  6. TPO-22 C1 Complain about a biased article

    /* 加粗:语音部分 * 红色:单词部分 * 斜体:语法部分 * 下划线:信号词/句 */ 第 1 段 1.Listen to a conversation between a student and ...

  7. 【LeetCode算法题库】Day5:Roman to Integer & Longest Common Prefix & 3Sum

    [Q13] Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Valu ...

  8. 三种UIScrollView嵌套实现方案

    背景 随着产品功能不断的迭代,总会有需求希望在保证不影响其他区域功能的前提下,在某一区域实现根据选择器切换不同的内容显示. 苹果并不推荐嵌套滚动视图,如果直接添加的话,就会出现下图这种情况,手势的冲突 ...

  9. 使用Java EE 在eclipse 开发动态的Web工程(Java web项目)

    1.使用Java EE 在eclipse 开发动态的Web工程(Java web项目)1)开发开发选项切换到JavaEE2)可以在Windows->show view中找到package exp ...

  10. MySQL基础练习(二)

    第一个例子我们编写一个 SQL 查询,列出所有超过或等于5名学生的课. 先建表 CREATE TABLE courses( student ) NOT NULL, class ) NOT NULL ) ...