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进制整形相关推荐

  1. ipv6 16进制转成10进制的数

    /** * ipv6 16进制转成10进制的数 * @param ip 1:1:2:2:ffff:ffff:ffff:ffff * @returns Array 10进制数的数组 */ ipSrv.p ...

  2. C# .NET 16进制转换,10进制转换,8进制转换,2进制转换

    C# .NET 16进制转换,10进制转换,8进制转换,2进制转换 介绍: 16进制:外文名"Hexadecimal"简写 hex: 大多时候以"H"表示 10 ...

  3. C语言 将16进制转换成10进制输出

    大家好!今天来打印16进制转换成10进制输出,16进制前面是0x.这里以打印ABCDEF的10进制为例 如下: 希望有所启发!!!^__^ 大雨落幽燕,白浪滔天,秦皇岛外打鱼船. ---------- ...

  4. 16进制转带符号的10进制,16进制转负数10进制

    16进制转带符号的10进制,16进制转负数10进制 看代码 echo '<pre>'; $str = 'd8f1'; function hex_dec($str){// 一般说明带符号 第 ...

  5. 【python】用python进行进制转换(10进制、2进制、16进制)

    进制转换 ① 16进制转10进制 ② 16进制转2进制 ③ 10进制转16进制 ④ 10进制转2进制 ⑤ 2进制转16进制 ⑥ 2进制转10进制 博客由来写在前面:由于计组老师要求我们课后查一下进制转 ...

  6. 16进制字符串转10进制数值

    16进制字符串转10进制数值 描述 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示. 数据范围:保证结果在 1≤n≤2^31−1 输入描述:输入一个十六进制的数值字符串. 输出描述:输出该 ...

  7. 16进制数和10进制数之间的转换

    1.16进制转10进制数 parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数. //将10这个字符指 ...

  8. 数据处理:16进制补码 转换为 10进制数值

    此功能仅为各位兄弟姐妹提供算法思路,由于功能简单直接上代码. 1. 16进制数值直接转换10进制 int HexToInt16_Complemwnt(unsigned char* data, int ...

  9. 【汇编】16进制转换成10进制(三种方法)

    汇编语言程序:16进制转换成10进制(三种方法) 1 ;天水浪客(Gouki Jiang) , 16进制to10进制例题 2007.5.18 2 STACK SEGMENT PARA STACK 3 ...

  10. 【POJ 1200】Crazy Search(将字符映射为数字,将NC进制hash成10进制)

    题目链接 题目链接 http://poj.org/problem?id=1200 题意 原字符串有NC个不同字母,统计原字符串长度为N的子字符串个数 解题思路 将字符按ASCII码映射成数字. 将n个 ...

最新文章

  1. magento常用软件
  2. 数据分析从头学_数据新闻学入门指南:让我们从头开始构建故事
  3. python教程5小时完整版_Python零基础入门教程5小时完整版(北京理工大2020年版)
  4. ECshop商城程序常见的96个小问题汇总
  5. SSL/TLS捕包分析
  6. android插件做动态权限,Mui本地打包笔记(四)Android自定义插件的配置(以动态申请权限为例)...
  7. sklearn-python简介
  8. JMX configuration for Tomcat
  9. SD卡无法格式化怎么办的解决方法
  10. 【小墨mysql】mysql系列之一---索引
  11. 一招教你表格里面给方框内打勾
  12. C语言学习有感day01
  13. 关于CPU架构之总结
  14. vSphere web client 虚拟机生成模板快速部署
  15. 2013届毕业生 沈阳找工作总结
  16. react+antd解决报错:Module not found: Can't resolve 'antd/es/affix'
  17. 公共基础知识:吴中四士
  18. SNMP免费网管系统-SugarNMSTool
  19. 连接网上邻居中的电脑时,总是提示需要输入用户名和密码?
  20. 银行SWIFT/BIC编码介绍

热门文章

  1. 预编译时#define 后面只跟一个参数
  2. 介绍几个移动广告平台
  3. 子账号表的设计(不用递归实现查询,同一张表做外键)
  4. Eclipse WTP使用经验--禁用自动发布到服务器
  5. 浅析Tomcat结构以及自定义嵌入式Tomcat
  6. C#装饰模式——某家咖啡店在卖咖啡时可以根据顾客的要求在其中加入各种配料,咖啡店会根据所加入的配料来计算总费用。
  7. c++string常用函数
  8. 古代不止有冰激凌,自制空调的方法可供现代借鉴
  9. 华为新系统鸿蒙升级平板名单,华为鸿蒙系统官方升级名单
  10. javascript 解构