精华内容
下载资源
问答
  • 16进制与二进制之间的转换
    千次阅读
    2020-10-11 02:31:09

    前言

    很多时候我们需要在16进制与二进制之间相互转换,而8421法就可以实现16进制与二进制之间的相互转换

    一、二进制转16进制

    如:0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

    1、二进制数据4个一组进行划分

    2、我们发现4个二进制位刚好能够表示16个数,于是规定(0000)0,(0001)1,( 0010 )2,(0011)3,( 0100)4,( 0101 )5,(0110)6,( 0111)7,( 1000 )8,(1001)9,( 1010)a,( 1011 )b,(1100)c,( 1101)d,( 1110 )e,(1111)f这样一个映射关系

    3、将每一组都与相应的映射联系起来,0001为1,0010为2,0011为3,… ,1010为a,1011为b,1100为c…,这样我们的二进制的例子翻译为16进制就为123456789abcdef

    16进制转二进制

    如:123456789abcdef

    1、已有映射:(0000)0,(0001)1,( 0010 )2,(0011)3,( 0100)4,( 0101 )5,(0110)6,( 0111)7,( 1000 )8,(1001)9,( 1010)a,( 1011 )b,(1100)c,( 1101)d,( 1110 )e,(1111)f

    2、将相关数据与映射联系起来1为(0001),2为(0010),3为(0011),…,a为(1010),b为(1011),c为(1100)…,这样我们的16进制的例子翻译为二进制就为0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

    更多相关内容
  • 本文实例讲述了php将字符串转换成16进制的方法。分享给大家供大家参考。具体分析如下: php中可以通过bin2hex函数将字符串转换成16进制的形式输出,bin2hex()函数返回结果为ascii码 <?php $string = "Hello\...
  • 基本数据内容数值型:整型和浮点型字符型整型包括...3、变量的使用1.1 程序设计和程序设计语言1.程序从最一般的意义来说,程序是对解决某个计算问题的方法(算法)步骤的一种描述;而从计算机来说,计算机程序是用某...

    基本数据内容

    数值型:整型和浮点型字符型

    整型包括:short,短整形、int,整型、long长整型、

    浮点型包括:float,单精度型、double,双精度型、

    字符型:char,字符型

    变量:存储数据的基本单位

    作用:1、变量的声明 2、变量的赋值 3、变量的使用

    1.1 程序设计和程序设计语言

    1.程序

    从最一般的意义来说,程序是对解决某个计算问题的方法(算法)步骤的一种描述;而从计算机来说,计算机程序是用某种计算机能理解并执行的计算机语言作为描述语言,对解决问题的方法步骤的描述。计算机执行按程序所描述的方法步骤,能完成指定的功能。所以,程序就是供计算机执行后能完成特定功能的指令序列。

    一个计算机程序主要描述两部分内容:描述问题的每个对象和对象之间的关系,以及描述对这些对象作处理的处理规则。其中关于对象及对象之间的关系是数据结构的内容,而处理规则是求解的算法。针对问题所涉及的对象和要完成的处理,设计合理的数据结构常可有效地简化算法,数据结构和算法是程序最主要的两个方面。

    2.程序设计的任条和主要步骤

    程序设计的任务就是分析解决问题的方法步骤(算法),并将解决问题算法的方法步骤用计算机语言记录下来。程序设计的主要步骤包括:认识问题、设计解决问题的算法、按算法编写程序、调试和测试程序。在程序开发过程中,上述步骤可能有反复,如发现程序有错,严重情况可能会要求重新认识问题和重新设计算法等。

    3.机器语言和汇编语言

    计算机能直接识别和执行的二进制代码称为计算机的机器语言。用有助于记忆的符号来代表二进制代码,称为汇编语言。汇编语言与机器语言几乎有一对一的关系。用汇编语言编写的程序称为“汇编源程序”,汇编源程序不能在计算机上直接执行,需要用汇编程序将汇编源程序翻译成机器语言程序,然后执行由汇编程序翻译出来的机器语言程序。机器语言和汇编语言是与具体计算机紧密相关的,称它们是面向机器的语言。

    4.高级语言

    与机器语言和汇编语言相比较,高级语言与具体计算机无关,是一种能方便描述算法过程的计算机程序设计语言。高级语言种类千差万别,但一般包含有以下四种成分:数据成分用来描述程序所涉及的数据;运算成分用来描述运算;控制成分用来表达程序的控制构造;传输成分用来表达数据的传输。由于高级语言程序主要是描述计算机的解题过程,即描述复杂的加工处理过程,所以也称这种高级语言为面向过程语言。

    用高级语言编写的程序称为“源程序”。计算机不能直接技源程序的语句运行,通常有解释方式和编译方式两种方法在计算机上执行源程序。

    解释方式,即让计算机运行解释程序,解释程序逐句取出源程序中的语句,对它作解释执行,输入数据,产生结果。

    编译方式,即先运行编译程序,从源程序一次翻译产生计算机可直接执行的二进制程序(称为目标程序);然后让计算机执行目标程序,输入数据,产生结果。

    解释方式的主要优点是计算机与人的交互性好,调试程序时,能一边执行一边直接改错,能较快得到一个正确的程序。缺点是逐句解释执行,运行速度慢。

    编译方式的主要优点是计算机运行目标程序快,缺点是修改源程序后必须重新编译以产生新的目标程序。

    现在也有将上述两种方式结合起来的,即先编译源程序,产生计算机还是不能直接执行的中间代码,然后让解释程序解释执行中间代码。这样做的好处首先是比直接解释执行快;更大的好处是中间代码独立于计算机,只要有相应的解释程序,就可在任何计算机上运行。

    5.面向问题语言

    面向问题语言是为了易于描述和求解某类特定领域的问题而专门设计的一种非过程语言。用面向问题语言解题时,不仅摆脱计算机的内部逻辑,也不必关心问题的求解算法和求解的过程,只需指出问题是做什么,数据的输入和输出形式,就能由相应的计算机系统得到所需结果。如报表语言、SOL(Structured

    Query

    Language)语言等。SQL语言是数据库查询和操纵语言,能直接使用数据库管理系统。由于使用面向问题语言来解题只要告诉计算机做什么,不必告诉计算机如何做,能方便用户的使用和提高程序的开发速度。但实现面向问题语言的系统从最一般的意义下实现问题如何求解,通常实现的效率较低。另外,面向问题语言要求问题已有通用的求解方法,目前其应用范围还比较狭窄。

    展开全文
  • Python里面的进制转换

    2018-09-09 18:06:37
    Python里的进制转换 以前用C语言写过一些单片机的串口程序,

    Python中变量是无类型的,但是变量可以指向某一个内存区域,该区域的类型就是变量的类型,Python在给一个变量赋值的时候才能确定该变量的类型,可以理解为Python有一个变量表,当给变量赋值的时候,相当于在内存中分配了一个存储区域,然后在变量表里添加了该变量,并将该变量指向分配的内存区域。

    Python的这个特性决定了其动态类型的特征,在理解的时候要区分于C、C#等编程语言。

    Python里的进制转换

    Python在处理字节串时候的困难

    以前用C语言写过一些单片机的串口程序,通信一般用的是字节串,这次想用Python实现一个基于TCP的104协议,实际编写中才发现Python为了方便使用,数据类型int并未固定长度,也无法将其设置为8个比特位长度。甚至无法利用十六进制(0xAA)之类的给变量赋值。也就是说不管是变量还是表达式,Python根本无法表示一个字节的数值。

    Python里的解决办法

    好在Python里可以通过bytes()函数获得一个字节串,这就表示我们找到一个可以装一个字节的变量,但是依然无法利用一个变量或表达式给其赋值,只可以通过bytes()函数返回。值得注意的是,bytes()函数如果给他一个整数,并不会返回该整数的字节,只会返回一个长度为该整数的字节串。
    Python代码:

    >>> bytes(10)
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    >>> 

    如果要想返回一个数值为10 的字节,需要给一个可迭代的对象(list)
    Python代码:

    >>> bytes([12])
    b'\x0c'
    >>> 

    同样,通过通信口接收的字节串也可以转换为list类型
    Python代码:

    >>> list(b"12")
    [49, 50]
    >>> 

    “12”默认是字符,转换过来就是49,50,不过不用担心,从通信口过来的数据肯定是真正的字节串。这个不影响。
    走到这一步还不行,因为在一般的报文识别中,都是利用十六进制来进行识别的,如果我们用Python内置的进制转换函数会发现:

    >>> hex(10)
    '0xa'
    >>> 
    >>> hex(16)
    '0x10'
    >>> 

    这里的转换结果是一个字符串,并且在16以下,转换出来的是0xa,并不是0x0a,这在后续的报文识别中是个麻烦,所以自己编写了一个工具类,专门用来做10到16进制的转换。

    >>> Change.changets(10)
    '0A'
    >>> Change.change_list_ts([1,2,3,4,5,6])
    ['01', '02', '03', '04', '05', '06']
    >>> Change.changest("0A")
    10
    >>> Change.change_list_st(["01","02","03"])
    [1, 2, 3]
    >>> 

    转换过来的十六进制仍然是字符串,这个没法改变。
    以下是Change类的源码:

    class Change:
    
         ten_sit={0: '00', 1: '01', 2: '02', 3: '03', 4: '04', 5: '05',
                 6: '06', 7: '07', 8: '08', 9: '09', 10: '0A', 11: '0B',
                 12: '0C', 13: '0D', 14: '0E', 15: '0F', 16: '10', 17: '11',
                 18: '12', 19: '13', 20: '14', 21: '15', 22: '16', 23: '17',
                 24: '18', 25: '19', 26: '1A', 27: '1B', 28: '1C', 29: '1D',
                 30: '1E', 31: '1F', 32: '20', 33: '21', 34: '22', 35: '23',
                 36: '24', 37: '25', 38: '26', 39: '27', 40: '28', 41: '29',
                 42: '2A', 43: '2B', 44: '2C', 45: '2D', 46: '2E', 47: '2F',
                 48: '30', 49: '31', 50: '32', 51: '33', 52: '34', 53: '35',
                 54: '36', 55: '37', 56: '38', 57: '39', 58: '3A', 59: '3B',
                 60: '3C', 61: '3D', 62: '3E', 63: '3F', 64: '40', 65: '41',
                 66: '42', 67: '43', 68: '44', 69: '45', 70: '46', 71: '47',
                 72: '48', 73: '49', 74: '4A', 75: '4B', 76: '4C', 77: '4D',
                 78: '4E', 79: '4F', 80: '50', 81: '51', 82: '52', 83: '53',
                 84: '54', 85: '55', 86: '56', 87: '57', 88: '58', 89: '59',
                 90: '5A', 91: '5B', 92: '5C', 93: '5D', 94: '5E', 95: '5F',
                 96: '60', 97: '61', 98: '62', 99: '63', 100: '64', 101: '65',
                 102: '66', 103: '67', 104: '68', 105: '69', 106: '6A', 107: '6B',
                 108: '6C', 109: '6D', 110: '6E', 111: '6F', 112: '70', 113: '71',
                 114: '72', 115: '73', 116: '74', 117: '75', 118: '76', 119: '77',
                 120: '78', 121: '79', 122: '7A', 123: '7B', 124: '7C', 125: '7D',
                 126: '7E', 127: '7F', 128: '80', 129: '81', 130: '82', 131: '83',
                 132: '84', 133: '85', 134: '86', 135: '87', 136: '88', 137: '89',
                 138: '8A', 139: '8B', 140: '8C', 141: '8D', 142: '8E', 143: '8F',
                 144: '90', 145: '91', 146: '92', 147: '93', 148: '94', 149: '95',
                 150: '96', 151: '97', 152: '98', 153: '99', 154: '9A', 155: '9B',
                 156: '9C', 157: '9D', 158: '9E', 159: '9F', 160: 'A0', 161: 'A1',
                 162: 'A2', 163: 'A3', 164: 'A4', 165: 'A5', 166: 'A6', 167: 'A7',
                 168: 'A8', 169: 'A9', 170: 'AA', 171: 'AB', 172: 'AC', 173: 'AD',
                 174: 'AE', 175: 'AF', 176: 'B0', 177: 'B1', 178: 'B2', 179: 'B3',
                 180: 'B4', 181: 'B5', 182: 'B6', 183: 'B7', 184: 'B8', 185: 'B9',
                 186: 'BA', 187: 'BB', 188: 'BC', 189: 'BD', 190: 'BE', 191: 'BF',
                 192: 'C0', 193: 'C1', 194: 'C2', 195: 'C3', 196: 'C4', 197: 'C5',
                 198: 'C6', 199: 'C7', 200: 'C8', 201: 'C9', 202: 'CA', 203: 'CB',
                 204: 'CC', 205: 'CD', 206: 'CE', 207: 'CF', 208: 'D0', 209: 'D1',
                 210: 'D2', 211: 'D3', 212: 'D4', 213: 'D5', 214: 'D6', 215: 'D7',
                 216: 'D8', 217: 'D9', 218: 'DA', 219: 'DB', 220: 'DC', 221: 'DD',
                 222: 'DE', 223: 'DF', 224: 'E0', 225: 'E1', 226: 'E2', 227: 'E3',
                 228: 'E4', 229: 'E5', 230: 'E6', 231: 'E7', 232: 'E8', 233: 'E9',
                 234: 'EA', 235: 'EB', 236: 'EC', 237: 'ED', 238: 'EE', 239: 'EF',
                 240: 'F0', 241: 'F1', 242: 'F2', 243: 'F3', 244: 'F4', 245: 'F5',
                 246: 'F6', 247: 'F7', 248: 'F8', 249: 'F9', 250: 'FA', 251: 'FB',
                 252: 'FC', 253: 'FD', 254: 'FE'}
         sit_ten={'ED': 237, 'E7': 231, '38': 56, '78': 120, '16': 22, 'B2': 178,
                 'BA': 186, '63': 99, 'D0': 208, 'FA': 250, '9A': 154, '91': 145,
                 'A5': 165, 'F5': 245, '0E': 14, '15': 21, 'DB': 219, '74': 116,
                 '4F': 79, '4C': 76, 'BC': 188, '12': 18, '6F': 111, '44': 68,
                 '67': 103, '49': 73, 'FC': 252, '35': 53, 'A3': 163, '00': 0,
                 'EE': 238, '7A': 122, 'AE': 174, 'B1': 177, '85': 133, '8F': 143,
                 '8C': 140, '0A': 10, '61': 97, '86': 134, '14': 20, 'D7': 215,
                 '3A': 58, '05': 5, '73': 115, '1B': 27, '22': 34, '52': 82,
                 'A9': 169, '2C': 44, 'BB': 187, 'FE': 254, 'BD': 189, '31': 49,
                 '51': 81, 'BE': 190, '65': 101, '13': 19, '9D': 157, 'F3': 243,
                 '6B': 107, '37': 55, '27': 39, 'EA': 234, 'DA': 218, '53': 83,
                 '62': 98, '6E': 110, '20': 32, 'B9': 185, 'D5': 213, '5C': 92,
                 '11': 17, 'E5': 229, 'E8': 232, 'E0': 224, 'C2': 194, 'D1': 209,
                 'A4': 164, '39': 57, '71': 113, 'C8': 200, 'B3': 179, '07': 7,
                 '5A': 90, '95': 149, '23': 35, 'C1': 193, '34': 52, '41': 65,
                 'F1': 241, '87': 135, '72': 114, '77': 119, 'F4': 244, '43': 67,
                 '02': 2, '36': 54, '84': 132, '83': 131, 'F8': 248, '96': 150,
                 '5F': 95, '97': 151, 'C7': 199, 'D8': 216, '18': 24, 'F0': 240,
                 '98': 152, 'CF': 207, 'EC': 236, '29': 41, '25': 37, 'AF': 175,
                 '32': 50, 'CC': 204, '93': 147, '57': 87, '79': 121, '1E': 30,
                 '3B': 59, 'EF': 239, 'DD': 221, 'AC': 172, '4D': 77, '01': 1,
                 '3E': 62, '47': 71, '3F': 63, '9B': 155, 'C5': 197, '60': 96,
                 '21': 33, 'E3': 227, 'B7': 183, '19': 25, '0B': 11, '10': 16,
                 'FD': 253, '30': 48, '5D': 93, '7B': 123, 'CA': 202, 'A1': 161,
                 '4A': 74, '24': 36, '9C': 156, 'CE': 206, 'EB': 235, '56': 86,
                 '99': 153, '4B': 75, '6C': 108, '75': 117, '42': 66, 'B5': 181,
                 '82': 130, 'E2': 226, 'DC': 220, '8E': 142, '8D': 141, '58': 88,
                 '55': 85, '80': 128, 'C3': 195, '9F': 159, '06': 6, 'B4': 180,
                 'F7': 247, '5E': 94, 'DE': 222, '7D': 125, 'AA': 170, 'FB': 251,
                 'E4': 228, '6D': 109, '69': 105, 'F6': 246, '68': 104, '45': 69,
                 'CB': 203, 'A0': 160, 'A7': 167, '6A': 106, 'B6': 182, '1F': 31,
                 '59': 89, '76': 118, 'AD': 173, '70': 112, '8A': 138, 'B0': 176,
                 '2A': 42, '1A': 26, 'D3': 211, 'D4': 212, '92': 146, 'C0': 192,
                 '46': 70, '9E': 158, '03': 3, '7E': 126, '7F': 127, 'BF': 191,
                 '89': 137, '33': 51, '0D': 13, 'E9': 233, 'E1': 225, '0C': 12,
                 'C6': 198, '04': 4, '8B': 139, '1D': 29, '50': 80, '66': 102,
                 '28': 40, 'D6': 214, 'C9': 201, '64': 100, 'D9': 217, '54': 84,
                 'C4': 196, '08': 8, '2E': 46, '88': 136, 'DF': 223, '7C': 124,
                 '0F': 15, 'A8': 168, '17': 23, 'A6': 166, '3D': 61, '94': 148,
                 'B8': 184, 'AB': 171, '48': 72, '2F': 47, '3C': 60, 'D2': 210,
                 '09': 9, 'E6': 230, 'F2': 242, '26': 38, '81': 129, 'CD': 205,
                 '2D': 45, '90': 144, '4E': 78, '1C': 28, '2B': 43, '40': 64,
                 'A2': 162, 'F9': 249, '5B': 91}
    
         @staticmethod
         def changets(data):
              return Change.ten_sit.get(data)
         @staticmethod
         def changest(str_data):
             return Change.sit_ten.get(str_data)
         @staticmethod
         def change_list_ts(lts):
             return list(map(Change.changets,lts))
         @staticmethod
         def change_list_st(lst):
             return list(map(Change.changest,lst))

    后续对报文的处理将持续更新。

    展开全文
  • 进制转换、字符编码

    2017-01-12 16:12:20
    十进制、二进制、十六进制【进制转换】 1.十进制转二进制 1.1十进制整数转二进制 【除2取余,逆序排列】 具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此...
    十进制、二进制、十六进制【进制转换】

    1.十进制转二进制

    1.1十进制整数转二进制

    【除2取余,逆序排列】
    具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
    例如:23[10] = 10111[2]
    23 / 2 = 11 ......1
    11 / 2 = 5  ......1
    5  / 2 = 2  ......1
    2  / 2 = 1  ......0
    1  / 2 = 0  ......1
    逆序排列为10111

    1.2十进制小数转二进制
    【乘2取整,顺序排列】
    具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,此时0或1为二进制的最后一位。或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
    例如:0.6[10] =0.101[2]
    0.625 * 2 = 1.25 ======取出整数部分1
    0.25  * 2 = 0.5  ======取出整数部分0
    0.5   * 2 = 1    ======取出整数部分1

    2.二进制转十进制
    从左到右用二进制的每个数去乘以2的相应次方。
    例如:1101.01[2] = 13.25[10]
    1101.01 = 1*2的0次 + 0*2的1次 + 1*2的2次 + 1*2的3次【前面为整数部分】  +  0*2的-1次 + 1*2的-2次 = 1+0+4+8+0+0.25=13.25

    3.十进制转十六进制
    16进制即逢16进1,其中用A,B,C,D,E,F(字母不区分大小写)这六个字母来分别表示10,11,12,13,14,15。
    故而有16进制每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共16个大小不同的数。

    十进制转十六进制 同理 十进制转二进制
    【除16取余,逆序排列】
    例如:10997[10] = 2AF5[16]
    10997 / 16 = 687......5
    687   / 16 = 42 ......15
    42    / 16 = 2  ......10
    2     / 16 = 0  ......2
    所以10997[10] = 2 + A + F + 5 = 2AF5[16]

    4.十六进制转十进制
    同理二进制转十进制
    例如:2AF5[16] = 10997[10]
    5 * 16的0方 = 5
    F * 16的1方 = 240
    A * 16的2方 = 2560
    2 * 16的3方 = 8192
    所以2AF5[16] = 5 + 240 + 2560 + 8192 = 10997[10]
    ==============================================================================================
    字符编码

    为什么要进行编码?这些编码的关系如何,如ASCII,IOS-8859-1,GB2312,GBK,Unicode之间的关系?

    为何需要编码?
      我们知道,所有的信息最终都表示为一个二进制的字符串,每一个二进制位(bit)有0和1两种状态。当我们需要把字符'A'存入计算机时,应该对应哪种状态呢,存储时,我们可以将字符'A'用01000010(这个随便编的)二进制字符串表示,存入计算机;读取时,再将01000010还原成字符'A'。那么问题来了,存储时,字符'A'应该对应哪一串二进制数呢,是01000010?或者是10000000 11110101?说白了,就是需要一个规则。这个规则可以将字符映射到唯一一种状态(二进制字符串),这就是编码。而最早出现的编码规则就是ASCII编码,在ASCII编码规则中,字符'A'既不对应01000010,也不对应1000 0000 11110101,而是对应01000001。

    1.ASCII

           这套编码规则是由美国定制,一共规定了128个字符的编码,比如空格"SPACE"是32(十进制)(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括 32个不能打印出来的控制符号),只占用了一个字节(8 bit)的后面7位,最前面的1位统一规定为0。总共才有128个字符编码,一个字节都没有用完,这好像似乎有点太少了。于是乎,就开始压榨最高位,对其为1时也进行编码,利用最高位进行编码的方式就称为非ASCII编码,如ISO-8859-1编码。

    2.ISO-8859-1
    这套编码规则由ISO组织制定。是在 ASCII 码基础上又制定了一些标准用来扩展ASCII编码,即 00000000(0) ~ 01111111(127) 与ASCII的编码一样,对 10000000(128) ~ 11111111(255)这一段进行了编码,如将字符§编码成 10100111(167)。ISO-8859-1编码也是单字节编码,最多能够表示256个字符。Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。但是,即使能够表示256个字符,对中文而言,还是太少了,一个字节肯定不够,必须用多个字节表示。而常见的中文编码方式有GB2312、BIG5、GBK。

    3.GB2312
    GB2312其对所收录字符进行了"分区"处理,共94个区,区从1(十进制)开始,一直到94(十进制),每区含有94个位,位从1(十进制)开始,一直到94(十进制),共8836(94 * 94)个码位,这种表示方式也称为区位码,GB2312是双字节编码,其中高字节表示区,低字节表示位。各区具体说明:
    01-09区收录除汉字外的682个字符,有164个空位(9 * 94 - 682)。
    10-15区为空白区,没有使用。
    16-55区收录3755个一级汉字(简体),按拼音排序。
    56-87区收录3008个二级汉字(简体),按部首/笔画排序。
    88-94区为空白区,没有使用。

    区位码的表示范围为0101 - 9494(包含了空的区位码)。那么根据区位码如何算出GBK2312编码呢?
    将区(十进制) 和 位(十进制)分别转化为十六进制,并加上A0,组合区和位,区在高字节,位在低字节,得到GB2312编码。
    例如:'李'字的区位码为3278(表示在32区,78位)。
    1. 将32(区)转化为十六进制为20。
    2. 加上A0为C0。
    3. 将78(位)转化为十六进制为4E。
    4. 加上A0为EE。
    5. 组合区和位,为C0EE。
    6. 得到GB2312编码,即'李'字的GB2312编码为C0EE。

    GB2312用两个字节编码,采用分区编码,总共编码的中文个数为6763(3755 + 3008)。这些汉字只是最常用的汉字,已经覆盖中国大陆99.75%的使用频率。
    但是,还有一些汉字在GB2312中没有被编码,如'镕'字,在GB2312中就没有被编码,这样就导致了问题,随之就出现了主流的GBK编码。
    在讲解GBK编码之前,我们另外讲解一下BIG5编码。

    4.BIG5
    BIG5采用双字节编码,使用两个字节来表示一个字符。高位字节使用了0x81-0xFE,低位字节使用了0x40-0x7E,及0xA1-0xFE。该编码是繁体中文字符集编码标准,共收录13060个中文字,其中有二字为重复编码,即“兀、兀”(A461及C94A)和“嗀、嗀”(DCD1及DDFC)。具体的分区如下: 
    8140-A0FE 保留给使用者自定义字符(造字区)
    A140-A3BF 标点符号、希腊字母及特殊符号。其中在A259-A261,收录了度量衡单位用字:兙兛兞兝兡兣嗧瓩糎。
    A3C0-A3FE 保留。此区没有开放作造字区用。
    A440-C67E 常用汉字,先按笔划再按部首排序。
    C6A1-F9DC 其它汉字。
    F9DD-F9FE 制表符。

    注意,BIG5编码与GBK编码没有什么关系。

    5.GBK
    GBK编码扩展了GB2312,完全兼容GB2312编码(如'李'字的GBK、GB2312编码均为C0EE),但其不兼容BIG5编码。即如果使用GB2312编码,使用GBK解码是完全正常的
    相比于GB2312编码,GBK编码了更多汉字,如'镕'字。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。能表示 21003 个汉字。

    6.Unicode
           有两个独立的, 创立单一字符集的尝试. 一个是国际标准化组织(ISO)的 ISO 10646 项目, 另一个是由多语言软件制造商组成的协会组织的 Unicode 项目. 在1991年前后, 两个项目的参与者都认识到, 世界不需要两个不同的单一字符集. 它们合并双方的工作成果, 并为创立一个单一编码表而协同工作. 两个项目仍都存在并独立地公布各自的标准, 但 Unicode 协会和 ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 标准的码表兼容, 并紧密地共同调整任何未来的扩展。
           Unicode是指一张表,里面包含了可能出现的所有字符,每个字符对应一个数字,这个数字称为码点(Code Point),如字符'H'的码点为72(十进制),字符'李'的码点为26446(十进制)。Unicode表包含了1114112个码点,即从000000(十六进制) - 10FFFF(十六进制)。地球上所有字符都可以在Unicode表中找到对应的唯一码点。
    Unicode将码空间划分为17个平面,从00 - 10(十六进制,最高两位),即从0 - 16(十进制),每个平面有65536个码点(2^16),其中最重要的是第一个Unicode平面(码位从0000 - FFFF),包含了最常用的字符,该平面被称为基本多语言平面(Basic Multilingual Plane),缩写为BMP,其他平面称为辅助平面(Supplementary Planes),在基本多文种平面內, 从D800到DFFF之间的码位区段是永久保留不映射到字符的, 因此UTF-16编码巧妙的利用了这保留下来的码位来对辅助平面内的字符进行编码,

           Unicode只是一个符号集,只规定的字符所对应的码点,并没有指定如何存储,如何进行存储出现了不同的编码方案,关于Unicode编码方案主要有两条主线:UCS和UTF。UTF主线由Unicode Consortium进行维护管理,UCS主线由ISO/IEC进行维护管理。

    7.UTF

    7.1 UTF-8

    UTF-8是一种变长编码方式,使用1-4个字节进行编码。UTF-8完全兼容ASCII,对于ASCII中的字符,UTF-8采用的编码值跟ASCII完全一致。UTF-8是Unicode一种具体的编码实现。UTF-8是在互联网上使用最广的一种Unicode的编码规则,因为这种编码有利于节约网络流量(因为变长编码,而非统一长度编码)。关于Unicode码点如何转化为UTF-8编码,可以参照如下规则:
    ①对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
    ②对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

    Unicode符号范围                  |    UTF-8编码方式

     (十六进制) (十进制)            |   (二进制)
    ------------------------------------------------------------------------------------
    0000 0000 - 0000 007F (0-127)           |    0xxxxxxx
    0000 0080 - 0000 07FF (128-2047)        |    110xxxxx 10xxxxxx
    0000 0800 - 0000 FFFF (2048-65535)      |     1110xxxx 10xxxxxx 10xxxxxx
    0001 0000 - 0010 FFFF (65536-1114111)   |    11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

    说明:字符'A'的Unicode码点为65(十进制),根据上表,在第一行范围,则字符'A'的UTF-8编码为01000001,中文字符'李'的Unicode码点为26446(十进制),二进制为01100111 01001110,十六进制为674E。根据上表,在第三行范围,则将'李'二进制代码从低位到高位依次填入x中,不足的填入0。得到UTF-8编码为11100110 10011101 10001110,即E69D8E(十六进制)。
              由上述编码规则可知,0000 0000 - 0000 FFFF(第一行到第三行)为Unicode第一个平面(基本多语言平面),而0001 0000 - 10 FFFF(第四行)为Unicode其他平面(辅助平面)。在基本多语言平面对应了绝大多数常用的字符。对于大于65535(十进制)的码点,即在辅助平面上的码点,需要使用4个字节来进行UTF-8编码。

    7.2 UTF-16
    UTF-8是不定长的编码,使用1、2、3、4个字节编码,而UTF-16则只使用2或4个字节编码。UTF-16也是Unicode一种具体的编码实现。关于Unicode如何转化为UTf-16编码规则如下:
    ① 若Unicode码点在第一平面(BPM)中,则使用2个字节进行编码。
    ② 若Unicode码点在其他平面(辅助平面),则使用4个字节进行编码。

    参考: http://www.cnblogs.com/leesf456/p/5317574.html


    展开全文
  • 0xC0.0xA8.0x2A.0x48这里是我如何做到这一点在我的头上,因为我不擅长与大的数字,因为十六进制是基于16下图是DEC左和HEX的权利。0 = 01 = 12 = 23 = 34 = 45 = 56 = 67 = 78 = 89 = 910 = A11 = B12 = C13 = D14 = ...
  • 数据存储方式众所周知,java中的数据都是以二进制的形式存储在计算机中的,但是我们看到的数据怎么是10进制的,因为java提供了很多进制自动转换的方式。位移向左位移是*2的幂次,一般都是正数操作,右侧补0,所以不...
  • 2.1 关键字和保留字 定义:被java语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中所有字母小写 保留字:goto const 现有java版本尚未使用,以后可能会使用,避开保留字
  • 想将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成一个十六进制字符串 1)只是简单的解码或编码一个十六进制的原始字符串,可以使用 binascii模块 ...b'68656c6c6f' >>> binascii
  • ------------------十进制转换二进制----------------------  5 #include  6  7 int main()  8 {  9 int num=0;  10 printf("请输入一个0~255的数字:");  11 scanf("%d",&num);  12 ...
  • A string like “Hello World” to hex format: 48656C6C6F20576F726C64.啊,在这里你去:#include std::string string_to_hex(const std::string& input){static const char* const lut = "0123456789ABCDEF";...
  • ASCII、BCD转十六进制ASCII转十六进制转换规则Python实现BCD转十进制、十六进制BCD码的优点BCD码分类各种BCD码的特点转换规则ASCII转十六进制转换规则ASCII(American Standard Code for Information Interchange,...
  • 程序员的情商:二进制电脑能识别,十进制人易懂,十六进制能做啥?假如你有一个程序员的女朋友,突然给你发了一串数据(68656c6c6f 62616279),你知道什么意思吗?该怎么回她呢?每天除了写代码,就是在学习写代码的...
  • 汇编程序:十六进制转十进制

    千次阅读 2016-12-12 09:34:46
    asume cs:code code segmEnt start: ...https://zhidao.baidu.com/question/617730971000307732.html?qbl=relate_question_0&word=%BB%E3%B1%E0%CA%AE%C1%F9%BD%F8%D6%C6%D7%AA%CA%AE%BD%F8%D6%C6
  • 强类型语言是不同类型的变量相互操作的时候需要显示转换.而弱类型语言可以自动隐式转换.一,数值之间的转换基本语法:表达式T(v)将值v转换成类型T* T就是数据类型,比如int32, int64, float32等* v就是要转换的值基本...
  • binascii模块主要用于二进制数据(byte类型数据)和ASCII的转换 在16进制和字符串的转换过程中,主要用到了以下几个函数: a2b_hex():返回16进制的二进制数据表现形式 b2a_hex():返回二进制数据的16进制表现...
  • ASCII码16进制对照表

    千次阅读 2021-07-26 06:01:39
    它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的型态发表是在1967年,最后一次更新则是在1986年,至今为止共...
  • linux sftp 二进制

    2021-05-16 14:42:22
    第一步:开通 ECS 云服务器 我们进行自己云笔记的搭建也需要开通 ECS...支持多语言多用户有非常好的笔记记录体验,接下来我们将介绍 Leanote 的二进制版安装教程 1. 安装 MongoDB (1)导入包管理系统使用的公钥sudo a...
  • 假设有一个十六进制字符串,“99AD1B5226A37E3E058E3B8E27C2C666”,如何把它按照字节来切分,然后转成整型?也就是说转换成 0x99, 0xAD, 0x1B, … 代码实现 C 语言参考代码: #include <stdio.h> #include &...
  • 30.1十六进制转换工具在软件开发流程中的作用 30.2调用十六进制转换工具 30.3理解存储器宽度 30.4 ROMS伪指令 30.5 SECTIONS伪指令 30.6排除一个指定段 30.7给输出文件赋名 30.8图像模式和一nll选项 30.9为片上导引...
  • 十六进制解码 In 在 Easy String Encryption Using CryptoAPI in C++ I described how to encrypt text and recommended that the encrypted text be stored as a series of hexadecimal digits -- b...
  • 把[]byte表示成16进制(用String的形式)[]byte -> Stringsrc := []byte("Hello") encodedStr := hex.EncodeToString(src) // 注意"Hello"与"encodedStr"不相等,encodedStr是用...
  • 进制转换为二进制数的方法是:将每一位八进制数直接写成3位二进制数 3 Y+ A7 t. d s7 _$ d: E; { D.二进制转换为十六进制数的方法是:以小数点为界,向左或向右4个二进制位一组,两边不用补0 2 g8 q5 _4 q+ ...
  • 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f...b6c6d6e6f707172737475767778797a7b7c7d7e7f 2、字节串bytes与int的转换...
  • A/D模数转换——微机原理实验

    千次阅读 2021-06-07 18:07:04
    将数据转换为十进制 mov bx,10 mov si,2;三位 toDec: mov dx,0 div bx;(dx,ax)/bx中的数据除以bx mov [buf+si],dl;余数为该位上的值,第一次循环为个位,第二次为十位 dec si cmp ax,0;商为0表示算法结束 ja...
  • 编译器(如TI 集成开发环境CCS)编译C 语言或者汇编语言程序生成二进制机器代码,然后由机器代码生成X0 和Hex 这两种十六进制文件格式。本文首先介绍这两种文件格式,然后介绍如何在CCS 编译环境中产...
  • java 常量 变量 二进制

    2019-01-21 08:56:08
    ###01.24_Java语言基础(常量的概述和使用)(掌握) * A:什么是常量  * 在程序执行的过程中其值不可以发生改变  * B:Java中常量的分类  * 字面值常量  * 自定义常量(面向对象部分讲)  * C:字面值常量的...
  • ASCII码只有128个字符,在本页面直接按Ctrl+F输入你要查找的字符查询对应的ASCII吗,或者输入ASCII值(二进制、八进制、十进制、十六进制)查找对应的字符。 简介 ASCII(AmericanStandardCode ...
  • 把十六进制转换为 ASCII 字符: <?php echo hex2bin(48656c6c6f20576f726c6421); ?> 以上实例输出结果: Hello World! 定义和用法 hex2bin()函数把十六进制值的字符串转换为 ASCII 字符。 语法 hex2bin( ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,030
精华内容 2,012
关键字:

c6语言进制转换