OC有符号16进制整形转10进制整形
16进制有符号判断正负其实是将16进制转为2进制看最高位的值,如果是1则代表是负数,如果是0则代表正数,负数在计算机中是原数的补码,正数的补码就是原码,所以我们判断最高位是否是1,如果是1则最高位保持不变其余位按位取反则得到原码,这样我们可以这样想,我们不管这个16进制数是有符号还是无符号,我们都按无符号计算出来得到当前16进制数的无符号正数A,然后算出这个16进制数的-0也就是0X80.....(具体长度,视原16进制的长度而定)十进制数B和16进制数的最大值0XFF....(具体长度,视原16进制的长度而定)十进制数C,如果A < B ,这时A的二进制的最高位肯定为0,所以是整数直接输出,如果A>B,这时A的二进制的最高位肯定为1,这时A是一个负数,直接拿A-C即可,这样不用去每位都拿出来,判断最高位在去取反什么的,相对来说简点(不考虑溢出的情况,简单的使用是可以的),现附上代码
//将任意长度有符号16进制NSData类型转NSNumber(整形)
-(NSNumber *)signedHexTurnString:(NSData *)data
{
NSLog(@"%@", data);
if (!data)
{
return nil;
}
//获取data的长度
NSInteger lenth = [data length];
//获取16进制最大值
NSString *maxHexString = [self headString:@"F" trilString:@"F" strLenth:lenth];
//获取16进制分界点
NSString *centerHexString = [self headString:@"8" trilString:@"0" strLenth:lenth];
//获取data字符串
NSString *string = [self convertDataToHexString:data];
if ([[self numberHexString:string] longLongValue] - [[self numberHexString:centerHexString] longLongValue] < 0) {
return [self numberHexString:string];
}
return [NSNumber numberWithLongLong:[[self numberHexString:string] longLongValue] - [[self numberHexString:maxHexString] longLongValue]];
}
// 16进制转10进制
- (NSNumber *) numberHexString:(NSString *)aHexString
{
// 空,直接返回.
if (nil == aHexString)
{
return nil;
}
NSScanner * scanner = [NSScanner scannerWithString:aHexString];
unsigned long long longlongValue;
[scanner scanHexLongLong:&longlongValue];
//将整数转换为NSNumber,存储到数组中
NSNumber * hexNumber = [NSNumber numberWithLongLong:longlongValue];
return hexNumber;
}
-(NSString *)headString:(NSString *)headStr trilString:(NSString *)trilStr strLenth:(NSInteger)lenth
{
if (!headStr || !trilStr)
{
return nil;
}
//16进制获取最大值 和16进制有符号分界点
NSMutableString *string = [NSMutableString stringWithFormat:@"0x%@", headStr];
for (int i = 0; i < lenth * 2 - 1; i++)
{
[string appendString:trilStr];
}
return string;
}
//16进制转NSString
- (NSString *)convertDataToHexString:(NSData *)data {
if (!data || [data length] == 0) {
return @"";
}
NSMutableString *string = [NSMutableString stringWithString:@"0x"];
[data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
unsigned char *textBytes = (unsigned char*)bytes;
for (NSInteger i = 0; i < byteRange.length; i++) {
NSString *hexStr = [NSString stringWithFormat:@"%x", (textBytes[i]) & 0xff];
if ([hexStr length] == 2) {
[string appendString:hexStr];
} else {
[string appendFormat:@"0%@", hexStr];
}
}
}];
return string;
}
OC有符号16进制整形转10进制整形相关推荐
- ipv6 16进制转成10进制的数
/** * ipv6 16进制转成10进制的数 * @param ip 1:1:2:2:ffff:ffff:ffff:ffff * @returns Array 10进制数的数组 */ ipSrv.p ...
- C# .NET 16进制转换,10进制转换,8进制转换,2进制转换
C# .NET 16进制转换,10进制转换,8进制转换,2进制转换 介绍: 16进制:外文名"Hexadecimal"简写 hex: 大多时候以"H"表示 10 ...
- C语言 将16进制转换成10进制输出
大家好!今天来打印16进制转换成10进制输出,16进制前面是0x.这里以打印ABCDEF的10进制为例 如下: 希望有所启发!!!^__^ 大雨落幽燕,白浪滔天,秦皇岛外打鱼船. ---------- ...
- 16进制转带符号的10进制,16进制转负数10进制
16进制转带符号的10进制,16进制转负数10进制 看代码 echo '<pre>'; $str = 'd8f1'; function hex_dec($str){// 一般说明带符号 第 ...
- 【python】用python进行进制转换(10进制、2进制、16进制)
进制转换 ① 16进制转10进制 ② 16进制转2进制 ③ 10进制转16进制 ④ 10进制转2进制 ⑤ 2进制转16进制 ⑥ 2进制转10进制 博客由来写在前面:由于计组老师要求我们课后查一下进制转 ...
- 16进制字符串转10进制数值
16进制字符串转10进制数值 描述 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示. 数据范围:保证结果在 1≤n≤2^31−1 输入描述:输入一个十六进制的数值字符串. 输出描述:输出该 ...
- 16进制数和10进制数之间的转换
1.16进制转10进制数 parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数. //将10这个字符指 ...
- 数据处理:16进制补码 转换为 10进制数值
此功能仅为各位兄弟姐妹提供算法思路,由于功能简单直接上代码. 1. 16进制数值直接转换10进制 int HexToInt16_Complemwnt(unsigned char* data, int ...
- 【汇编】16进制转换成10进制(三种方法)
汇编语言程序:16进制转换成10进制(三种方法) 1 ;天水浪客(Gouki Jiang) , 16进制to10进制例题 2007.5.18 2 STACK SEGMENT PARA STACK 3 ...
- 【POJ 1200】Crazy Search(将字符映射为数字,将NC进制hash成10进制)
题目链接 题目链接 http://poj.org/problem?id=1200 题意 原字符串有NC个不同字母,统计原字符串长度为N的子字符串个数 解题思路 将字符按ASCII码映射成数字. 将n个 ...
最新文章
- magento常用软件
- 数据分析从头学_数据新闻学入门指南:让我们从头开始构建故事
- python教程5小时完整版_Python零基础入门教程5小时完整版(北京理工大2020年版)
- ECshop商城程序常见的96个小问题汇总
- SSL/TLS捕包分析
- android插件做动态权限,Mui本地打包笔记(四)Android自定义插件的配置(以动态申请权限为例)...
- sklearn-python简介
- JMX configuration for Tomcat
- SD卡无法格式化怎么办的解决方法
- 【小墨mysql】mysql系列之一---索引
- 一招教你表格里面给方框内打勾
- C语言学习有感day01
- 关于CPU架构之总结
- vSphere web client 虚拟机生成模板快速部署
- 2013届毕业生 沈阳找工作总结
- react+antd解决报错:Module not found: Can't resolve 'antd/es/affix'
- 公共基础知识:吴中四士
- SNMP免费网管系统-SugarNMSTool
- 连接网上邻居中的电脑时,总是提示需要输入用户名和密码?
- 银行SWIFT/BIC编码介绍