IOS 16进制字符串实现Java parseInt()算法及其相关
来源:互联网 发布:北京现代网络商学院 编辑:程序博客网 时间:2024/06/02 19:42
JAVA专业字符串按进制转换补码获取其值的算法直接用parseInt()一句代码即可,OC的话可按照补码的原理一步步实现.
补码:正整数的补码是本身,负数的补码是除符号位全部取反再加一.
如题,要想实现算法,将字符串按照十六进制每两位进行求补码运算获取byte数组即可.
+(int )HexToByte:(NSString *)hexString{ NSInteger length =hexString.length/2; Byte res[length]; int sum =0; for(int i=0;i<[hexString length]/2;i++) { int int_ch; /// 两位16进制数转化后的10进制数 unichar hex_char1 = [hexString characterAtIndex:i*2]; ////两位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 unichar hex_char2 = [hexString characterAtIndex:i*2+1]; ///两位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; BOOL complentResult = [self toBinarySystemWithDecimalSystem:int_ch]; if (!complentResult) { res[i] = 256 - int_ch; sum = sum - res[i]; }else { res[i] = int_ch; ///将转化后的数放入Byte数组里 sum = sum +res[i]; } } return sum;}+ (BOOL)toBinarySystemWithDecimalSystem:(NSInteger)decimal{ NSInteger num = decimal;//[decimal intValue]; NSInteger remainder = 0; //余数 NSInteger divisor = 0; //除数 NSString * prepare = @""; while (true) { remainder = num%2; divisor = num/2; num = divisor; prepare = [prepare stringByAppendingFormat:@"%ld",remainder]; if (divisor == 0) { break; } } NSString * result = @""; for (NSInteger i = prepare.length - 1; i >= 0; i --) { result = [result stringByAppendingFormat:@"%@", [prepare substringWithRange:NSMakeRange(i , 1)]]; } result = [self resultCompleted:result]; unichar firstChar = [result characterAtIndex:0]; BOOL complent; if(firstChar == '0'){ complent = YES; }else if (firstChar == '1'){ complent = NO; }else{ complent = NO; } return complent;}+ (NSString *)toHexStringWithNum:(NSInteger )num{ NSInteger remainder = 0; //余数 NSInteger divisor = 0; //除数 NSString * prepare = @""; NSArray *arr = @[@"A",@"B",@"C",@"D",@"E",@"F"]; while (true) { remainder = num%16; divisor = num/16; num = divisor; if (remainder>9) { NSInteger index = remainder - 10; prepare = [prepare stringByAppendingFormat:@"%@", arr[index]]; }else{ prepare = [prepare stringByAppendingFormat:@"%ld",remainder]; } if (divisor == 0) { break; } } NSString * result = @""; for (NSInteger i = prepare.length - 1; i >= 0; i --) { result = [result stringByAppendingFormat:@"%@", [prepare substringWithRange:NSMakeRange(i , 1)]]; } return result;}#pragma mark 自动补齐8位+ (NSString *)resultCompleted:(NSString *)resultString{ NSUInteger lengthAdd = 8- resultString.length; NSString *strZero = resultString; for (int i=0; i<lengthAdd; i++) { strZero =[NSString stringWithFormat:@"0%@",strZero]; } return strZero;}
PS:代码中还包括了后续的将补码值转为十六进制字符等操作.代码实现最终功能是根据所给十六进制字符串计算其校验和并转为十六进制字符添加到原有字符串上.
阅读全文
0 0
- IOS 16进制字符串实现Java parseInt()算法及其相关
- 二分查找及其相关算法的java实现
- Java parseInt实现
- java字符串解析函数parseInt()
- 字符串相关类型题目及其实现
- 阶乘相关的算法及其C++实现
- 容易理解的快速排序算法及其相关算法的总结(含java实现方法)
- java字符串反转相关算法
- 排序算法及其Java实现
- Manacher算法及其Java实现
- 遗传算法及其java实现
- java实现链表及其相关操作
- Java 相关计数问题及其实现
- 进制及其相关
- parseInt 进制转换
- 寻找字符串中最长回文——Manacher算法及其Java实现
- SIFT算法及其相关
- 拼图游戏及其相关算法
- error MSB6006: “cmd.exe”已退出,代码为3
- Android studio使用greendao作为数据库框架
- iOS-UIResponse之事件响应链及其事件传递
- 斗地主游戏发牌C#程序
- Spring的工厂模式和反射机制
- IOS 16进制字符串实现Java parseInt()算法及其相关
- C++ STL大全
- SCH 的END键是刷新屏幕
- linux svn server搭建、多项目管理及主备方案
- cache数据库:对象方式的数据库访问
- ubuntu 解压命令, less介绍, wget , uget+aria2
- 典型电子商务系统前台后台功能分析
- 找新朋友 【欧拉】
- DeltasFeatureExtractor API 及特征提取