精华内容
下载资源
问答
  • 最近解除了一个项目需要进行各种进制之间和类型的之间的转化,今天和大家分享一下,希望对大家有帮助 第一个就是NSData进行异或计算(^就代表异或操作),再高级语言中这种计算方式可以说是很陌生的,平常基本使用...

     

    最近解除了一个项目需要进行各种进制之间和类型的之间的转化,今天和大家分享一下,希望对大家有帮助

    第一个就是NSData进行异或计算(^就代表异或操作),再高级语言中这种计算方式可以说是很陌生的,平常基本使用不到今天分享一下计算过成

        __block uint8_t result = '\0' ;
        [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
            unsigned char *dataBytes = (unsigned char*)bytes;
            for (NSInteger i = 0; i < byteRange.length; i++) {
                uint8_t cha = dataBytes[i];
                //此处代码为异或操作复制到result中
                result^=cha;
            }
        }];

    将data放入该方法中,开始循环这个data.bytes内容,result就是最终结果。

    将10进制转16进制

    
    /**
     十进制转换十六进制
     
     @param decimal 十进制数
     @return 十六进制数
     */
    + (NSString *)getHexByDecimal:(NSInteger)decimal {
        
        NSString *hex =@"";
        NSString *letter;
        NSInteger number;
        for (int i = 0; i<9; i++) {
            
            number = decimal % 16;
            decimal = decimal / 16;
            switch (number) {
                    
                case 10:
                    letter =@"A"; break;
                case 11:
                    letter =@"B"; break;
                case 12:
                    letter =@"C"; break;
                case 13:
                    letter =@"D"; break;
                case 14:
                    letter =@"E"; break;
                case 15:
                    letter =@"F"; break;
                default:
                    letter = [NSString stringWithFormat:@"%ld", number];
            }
            hex = [letter stringByAppendingString:hex];
            if (decimal == 0) {
                
                break;
            }
        }
        return hex;
    }

    16进制形式的字符串转成16进制NSData类型

    
    /**
     将16进制类型的字符串转成16进制的NSData类型
    
     @param str 字符串
     @return nsdata
     */
    + (NSData *)convertHexStrToData:(NSString *)str{
        if (!str || [str length] == 0) {
            return nil;
        }
        
        NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];
        NSRange range;
        if ([str length] % 2 == 0) {
            range = NSMakeRange(0, 2);
        } else {
            range = NSMakeRange(0, 1);
        }
        for (NSInteger i = range.location; i < [str length]; i += 2) {
            unsigned int anInt;
            NSString *hexCharStr = [str substringWithRange:range];
            NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];
            
            [scanner scanHexInt:&anInt];
            NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];
            [hexData appendData:entity];
            
            range.location += range.length;
            range.length = 2;
        }
        return hexData;
    }

    例如:字符串:1D1E0E00A12F6951AD17DF003C4E 结果:<1d1e0e00 a12f6951 ad17df00 3c4e>

    将NSData转成可操作的字符串,十进制

    
    /**
     将NSData转成可操作的字符串,十进制
    
     @param data nsdata
     @return 转化结果
     */
    + (NSString *)sconvertDataToHexStr:(NSData *)data
    {
        if (!data || [data length] == 0) {
            return @"";
        }
        NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];
        
        [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
            unsigned char *dataBytes = (unsigned char*)bytes;
            for (NSInteger i = 0; i < byteRange.length; i++) {
                NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];
                if ([hexStr length] == 2) {
                    [string appendString:hexStr];
                } else {
                    [string appendFormat:@"0%@", hexStr];
                }
            }
        }];
        return string;
    }

    两个NSData进行异或计算

    
    /**
     异或计算(XOR)
    
     @param sourceData 第一个
     @param keyData 第二二
     @return 结果
     */
    + (NSData *)xor_EncodeData:(NSData *)sourceData withKey:(NSData *)keyData {
        Byte *keyBytes = (Byte *)[keyData bytes]; //取关键字的Byte数组, keyBytes一直指向头部
        Byte *sourceDataPoint = (Byte *)[sourceData bytes]; //取需要加密的数据的Byte数组
        for (long i = 0; i < [sourceData length]; i++) {
            sourceDataPoint[i] = sourceDataPoint[i] ^ keyBytes[i]; //然后按位进行异或运算
        }
        return sourceData;
    }
    

    再附上几个开发过程中常用到的小方法?

    MD5加密

    
    /**
     MD5加密
    
     @param password 密码
     @return 加密后的密码
     */
    + (NSString *)MD5StringWithPassWord:(NSString*)password {
        if ([password isKindOfClass:[NSString class]]) {
            NSString *str = (NSString *)password;
            const char *cStr = [str UTF8String];
            unsigned char result[16];
            CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
            return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7],result[8], result[9], result[10], result[11],result[12], result[13], result[14], result[15]] lowercaseString];
        }else{
            return nil;
        }
    }

    json字符串转成字典

    /**
     json转字典
    
     @param jsonString json
     @return 字典
     */
    + (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString{
        if (jsonString == nil) {
            return nil;
        }
        NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
        NSError *err;
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                            options:NSJSONReadingMutableContainers
                                                              error:&err];
        if(err){
            NSLog(@"json解析失败:%@",err);
            return nil;
        }
        return dic;
    }
    

    将字典转json字符串

    
    /**
     将字典转成j字符串
    
     @param dict 字典
     @return 字符串
     */
    + (NSString *)convertToJsonData:(NSDictionary *)dict{
        NSError *error;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
        NSString *jsonString;
        if (!jsonData) {
            NSLog(@"%@",error);
        }else{
            jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
        }
        NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
        NSRange range = {0,jsonString.length};
        //去掉字符串中的空格
        [mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
        NSRange range2 = {0,mutStr.length};
        //去掉字符串中的换行符
        [mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
        return mutStr;
    }

     

    判断字符串是否为空

    
    /**
     判断字符串是否为空
    
     @param aStr 传入的内容
     @return YES 不是字符串
     */
    + (BOOL)isEmptyOrNull:(NSString *)aStr {
        if (![aStr isKindOfClass:[NSString class]]) {
            return YES;
        }
        if (!aStr) {
            return YES;
        }
        if ([aStr isKindOfClass:[NSNull class]]) {
            return YES;
        }
        if (!aStr.length) {
            return YES;
        }
        if (aStr == nil) {
            return YES;
        }
        if (aStr == NULL) {
            return YES;
        }
        NSCharacterSet *set = [NSCharacterSet whitespaceAndNewlineCharacterSet];
        NSString *trimmedStr = [aStr stringByTrimmingCharactersInSet:set];
        if (!trimmedStr.length) {
            return YES;
        }
        return NO;
    }
    

    判断数组是否为空

    
    /**
     判断数组是否为空
     
     @param arr 数组
     @return bool
     */
    +(BOOL)isEmptyArrOrNull:(NSMutableArray*)arr{
        if (![arr isKindOfClass:[NSMutableArray class]] || ![arr isKindOfClass:[NSArray class]]) {
            return YES;
        }
        if (arr == nil) {
            return YES;
        }
        if (arr.count == 0) {
            return YES;
        }
        if (arr == NULL) {
            return YES;
        }
        return NO;
    }

    判断字典是否为空

    
    /**
     判断字典是否为空
     
     @param dic 数组
     @return bool
     */
    +(BOOL)isEmptyDictionaryOrNull:(NSDictionary*)dic{
        if (dic == nil) {
            return YES;
        }
        if (![dic isKindOfClass:[NSDictionary class]]) {
            return YES;
        }
        if (dic.count == 0) {
            return YES;
        }
        if (dic == NULL) {
            return YES;
        }
        
        return NO;
    }
    

    判断手机是否是异形曲面屏iPhone X等,需要导入一个官方类#import <sys/utsname.h>

    
    /**
     判断手机是否是异形屏幕
     
     @return YES 是 异形屏幕
     */
    + (BOOL)iphoneIsProfiledScreen {
        struct utsname systemInfo;
        uname(&systemInfo);
        NSString*platform = [NSString stringWithCString: systemInfo.machine encoding:NSASCIIStringEncoding];
        if([platform isEqualToString:@"iPhone10,3"] || [platform isEqualToString:@"iPhone10,6"]  || [platform isEqualToString:@"iPhone11,8"] || [platform isEqualToString:@"iPhone11,2"] || [platform isEqualToString:@"iPhone11,6"] || [platform isEqualToString:@"iPhone11,4"] ) {
            return YES;
        } else {
            return NO;
        }
    }

    将数组转成字符串

    
    /**
     将数组转成字符串
    
     @param arrJson 数据
     @return 字符串
     */
    + (NSString *)jsonStringCompactFormatForNSArray:(NSArray *)arrJson {
        if (![arrJson isKindOfClass:[NSArray class]] || ![NSJSONSerialization isValidJSONObject:arrJson]) {
            return nil;
        }
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:arrJson options:0 error:nil];
        NSString *strJson = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        return strJson;
    }

     

    展开全文
  • 如何计算16进制校验位?校验的实质是16进制取和模256的值。 eg. 十六进制串:0A0B0C0D0E0F 的校验位是: 4B (HEX)计算过程: 十六进制转十进制 0A (HEX)= 10(DEC),以此类推 计算和 10+11+12+13+14+15=75 ...

    如何计算16进制校验位?
    校验的实质是16进制取和模256的值。

    eg. 十六进制串:0A0B0C0D0E0F 的校验位是: 4B (HEX)
    计算过程:

    1. 十六进制转十进制 0A (HEX)= 10(DEC),以此类推
    2. 计算和 10+11+12+13+14+15=75 (DEC) 
    3. 取余 75%256=75
    4. 十进制转十六进制 75(DEC)= 4B(HEX)

    Java Code:

    public class CalculateCheckDigit {
    
        /** 输入十六进制,输出两位校验位 */
        public static void main(String args[]) {
            String sHex = "01 F1 00 04 03 06 01 B0";// 输入十六进制
            sHex = sHex.replace(" ", "");// 去掉中间空格
            String result = makeCheckSum(sHex);// 计算并获取校验位
            System.out.println(result);// 输入两位校验位 结果是B0
        }
    
        /** 计算校验位 ,返回十六进制校验位 */
        private static String makeCheckSum(String data) {
            int dSum = 0;
            int length = data.length();
            int index = 0;
            // 遍历十六进制,并计算总和
            while (index < length) {
                String s = data.substring(index, index + 2); // 截取2位字符
                dSum += Integer.parseInt(s, 16); // 十六进制转成十进制 , 并计算十进制的总和
                index = index + 2;
            }
    
            int mod = dSum % 256; // 用256取余,十六进制最大是FF,FF的十进制是255
            String checkSumHex = Integer.toHexString(mod); // 余数转成十六进制
            length = checkSumHex.length();
            if (length < 2) {
                checkSumHex = "0" + checkSumHex;  // 校验位不足两位的,在前面补0
            }
            return checkSumHex;
        }
    }

     

    为什么要计算校验位?校验位的原理是什么?

    检验和(checksum),在数据处理和数据通信领域中,用于校验目的地一组数据项的和。它通常是以十六进制为数制表示的形式。如果校验和的数值超过十六进制的FF,也就是255,就要求其补码作为校验和。通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。

    转载于:https://www.cnblogs.com/Sukie-s-home/p/7889598.html

    展开全文
  • 经常要与多种进制打交道,例如配置个子网啥子的,就需要将10进制进转换,但对于在GNU Linux的命令行模式下的操作来说,就不是如可视界面下的科学计算器那么安逸了,那么如何在shell下进行多种进制间的转换呢?...

    /****************************************
    * Author : Samson
    * Date : 02/10/2016
    * Test platform:
    * gcc 4.8.4
    * GNU bash, 4.3.30
    * Linux Mint 17
    * **************************************/


    在计算机的使用中,尤其是对于开发人员、运维人员来说,经常要与多种进制打交道,例如配置个子网啥子的,就需要将10进制进转换,但对于在GNU Linux的命令行模式下的操作来说,就不是如可视界面下的科学计算器那么安逸了,那么如何在shell下进行多种进制间的转换呢?


    shell 脚本默认数值是由10 进制数处理,除非这个数字某种特殊的标记法或前缀开头. 才可以表示其它进制类型数值。如:以 0 开头就是 8 进制.以0x 开头就是16 进制数.使用 BASE#NUMBER 这种形式可以表示其它进制.BASE值:2-64.


    使用方法:

    其它进制转为10进制


    八进制转十进制:


    $ ((num=020)); echo $num

    16


    $ ((num=8#20)); echo $num

    16


    ((表达式)),(())里面可以是任意数据表达式。如果前面加入:”$”可以读取计算结果。


    十六进制转十进制:


    $ ((num=0xff));echo $num

    255

    $ ((num=16#ff));echo $num;

    255


    base-32转十进制:


    $ ((num=32#ffff)); echo $num;

    507375


    base64转十进制:


    $ ((num=64#abc_)); echo $num;

    2667327


    二进制转十进制


    $ ((num=2#11111111)); echo $num;

    255


    十进制转为其它进制


    这里使用到:bc外部命令完成。bc命令格式转换为:echo "obase=进制;值"|bc


    10进制转为8进制:

    $ echo "obase=8;16" | bc

    20


    10进制转为二进制:

    $ echo "obase=2;1024" | b

    10000000000


    10进制转十六进制:

    $ echo "obase=16;32" | bc

    20

    10进制转base64:

    $ echo "obase=64;12345" | bc

    03 00 57


    shell,内置各种进制表示方法非常简单。记得base#number 即可。这里记得赋值时候用(())符号。不能直接用=号了。=号没有值类型。默认将后面变成字符串了。


    $ num=0123;

    $ echo $num;

    0123


    0开头已经失去了意义了。


    可以通过定义符:let达到(()) 运算效果。


    $ let num=0123;

    $ echo $num;

    83

    502
    展开全文
  • RGB颜色如何转变成16进制颜色

    千次阅读 2017-11-03 11:06:24
    但是它是如何计算的呢,首先,大家要知道10进制对应的10进制表.0对应0,15对应F~~~~ RGB颜色如何转变成16进制颜色 举例说明,例1:rgb(11,111,222)=#?????? 11÷16=0余11 11对应B 前面补0 那么HEX的数据为0B111÷16=6...
    RGB颜色如何转变成16进制颜色
    但是它是如何计算的呢,首先,大家要知道10进制对应的10进制表.0对应0,15对应F~~~~
    RGB颜色如何转变成16进制颜色
    举例说明,例1:rgb(11,111,222)=#??????
    11÷16=0余11   11对应B  前面补0  那么HEX的数据为0B111÷16=6余15  15对应F   那么HEX的数据为6F222÷16=13余14  13对应D  14对应E   那么HEX的数据为DE合起来HEX的数据就为#0B6FDE
    RGB颜色如何转变成16进制颜色
    4
    例2:rgb(0,16,255)=#??????0直接对应0016÷16=1余0  则HEX的数据为10255÷16=15余15  15对应F  则HEX的数据为FF合起来HEX的数据就为#0010FFHEX转换RGB不用说了吧,倒过来就行了
    RGB颜色如何转变成16进制颜色
    展开全文
  • 来吧,坐下聊先前在前文《老大说:谁要再用double定义商品金额,就自己收拾东西走》中已经痛彻心扉地聊过:在处理诸如 订单交易、货币计算、以及商品金额慎用浮点数(double/float)去定义变量,否则可能会遇到各种...
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用 32bit,double数据占用 64bit,我们在声明一个变量float f = ...,是如何分配内存的呢...
  • 来吧,坐下聊先前在前文 《老大说:谁要再用double定义商品金额,就自己收拾东西走》 中就已经痛彻心扉地聊过: 在处理诸如 订单交易、货币计算、以及商品金额慎用浮点数(double/float)去定义变量,否则可能会遇到...
  • 项目种常常设计一个背景图+透明color的方式 ,如何转换成普通的rgb或者16进制呢? 计算公式: Color = Color * alpha + Background * (1 - alpha);
  • 基数,二进制的基数是二,十进制的基数是十,十六进制的基数是16 r进制转化为10进制的方法 从右往左为该数的每个数位边上序号序号从零开始,直到n 每一个序号上的数值乘以基数的该序号次方。 如果是小数的话,那么...
  • python 把16进制字符串转化为16进制数字, 比如‘0x小编不希望有...(python)如何让python的16进制运算的输出格式为16进制而不...a='0x0012e' b= hex(eval(a)) print b 输出 0x12e 注意,一般计算机的十六进制数直接...
  • 最近需要计算串口发送的数据,太多而且比较麻烦。知道EXECL功能强大,所以网上找了找,刚好,不错,很方便。
  • 进制转化 ...比如二进制如何 表示3 十进制 : 0 1 2 3 二进制: 0 1 10 11 那在看看别的进制进制 : 6 7 8 9 八进制: 6 7 10 11 十进制 : 8 9 10 11 ... 15 16 17 十六进制: 8 9 a b ... f 10 11...
  • 背景基础知识:1.1、 “字符”是由数字来表示的先来重新了解一下计算机是如何处理“字符”的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不可模糊。我们知道,计算机把任何东西都用数字来表示,...
  • 除了10进制,计算机中还用8进制和16进制16进制更加常用一些。它们与二进制的关系跟十进制与二进制的关系类似,这里就不赘述了。下面用一个表总结它们的转换关系,大家感兴趣可以深入研究。 进制之间的转换有专门...
  • 1、开打科学计算器(电脑上自带的),将计算器选中"16进制",输入"51C4F7"; 2、按计算器的"/"; 3、输入"800000”; 4、选中计算器的"十进制"后,按"="; 5、按"*",按"2",在按"x^y"键,再按"10",再按"="。 ...
  • 一、整数拓展 进制进制0b,八进制0,十进制,十六进制0x 二进制以0b开头。其他同理. int int2 = ob10; int int8 = 010; int int10 = 10;...二、浮点数拓展浮点数的精确度,银行业务如何表示钱...
  • 但是 ... 该方法有问题,不能采用 或者你可以把表导入数据库中,再把显示正常的拷贝出来,扎心了 ...————————————————————————————————————————...excel计算年龄 在要计...
  • 我们买电脑的时候,都会知道,计算机有分为32位,64位,那么它们都代表什么意思呢? 这里所说的8位,16位,32位,64位指的都是计算机的二进制... 所以32位2进制,需要8位16进制数。(11642) 一个8进制对应3位二进制...
  • 例如:a在ascii码中用二进制编码01100001表示 16进制61h表示,我们用键盘输入一个a,计算机把a放入到制定的内存中,通过文本编辑软件从内存中把61H读取出来放入到显卡显存中,显卡工作在文本模式下以ascii方式解码,...
  • 进制,也就是进制位。我们常用的进制包含:二进制、八进制、十进制,十六进制; 它们之间区别在于数运算时是逢几进一位,二进制是逢二进一位,十进制(0~9)是...1.1 如何将十进制转换成二进制数? 首先,我们需要...
  • (其中1-16分别为:0 1 2 3 4 5 6 7 8 9 A B C D E F) 二进制与十进制之间的相互转换的规则就是 二进制数从右向左第一位乘以二的零次方第二位数乘以二的一次方向左依次递增最后做个累加。十进制转二进制则是把十...
  • 进制转换计算方法

    2020-05-29 11:31:30
    那么16进制换算成十进制该如何进行呢? 这里我们以0x54为例子计算一下。 0x54计算器转换之后值为84,那么84从何而来?实际上,十六进制的数是以"权"来讲的,十六进制个位数的权为个位数乘以16的 0次方,十位数...
  • EXCEL中实现16进制MAC的下拉

    千次阅读 2018-04-09 16:52:18
    一般我们都只会EXCEL进行10进制的下拉自动增长,但是如果是16进制数,如何进行下拉呢? EXCEL截图: 计算公式为: =REPT(0,$C$3-LEN($B$3))&amp;$B$3&amp;REPT(0,$C$4-LEN(DEC2HEX(HEX2DEC($B$4)+ROW...
  • 在秘诀194里面介绍了“如何在命令行进行简单的数学计算”。其实,“bc”命令有很多特性,其中之一就是可以进行16进制转换。把一个数转换为16进制,输入“bc”开始,然后输入“obase=16”,然后输入需要转换的数字。 ...
  • 进制核心思想: 冯诺依曼 + 图灵机电如何表示状态,才能稳定? 计算机开始设计的时候并不是考虑简单,而是考虑能自动完成任务与结果的可靠性, 简单始终是建立再稳定、可靠基础上 经过尝试10进制,但很难检查...
  • 其数值如何计算? 8.1 十进制数 每一位可使用十个不同数字表示(0、1、2、3、4、5、6、7、8、9)。 低位与高位的关系是:逢10进1。 各位的权值是10的整数次幂(基数是10 )。 标志: 尾部加“D”或缺省。 例: 204.96=2...
  • 由“给定一个数int,求其二进制数中有多少个1”而google到的,关于几种进制间如何转换... 在计算机中进制有10进制,2进制,8进制,和16进制。那么他们之间是如何定义和转换的呢?最为我们熟悉的进制应该是10进制,也就

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 453
精华内容 181
关键字:

如何计算16进制