16进制与字符间互相转换的原理是什么?

来源:百度知道 编辑:UC知道 时间:2024/06/14 19:55:10
各种高级编程语言都有直接转换的方式,不过不知道是按什么原理转换的.

比如说汉字"我"这个字符转换成16进制后是:CED2,程序是先把"我"这个字符按某种规则转换成数字,再把这个数字进行加减乘除等计算后再按某种规则转换成16进制字符CDE2,是这样的吗?
还是每个字符都对应唯一的一个16进制数组,在16进制与字符间互相转换时按"表"查询就可以了?就像c#中(char)(72)=char H,(int)(H)=int 72一样?

还有其他各进制与字符间的转换原理是不是和上面的一样?

有哪位朋友愿意回答我吗?

一、原理:
  Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。即byte用十六进制表示只占2位。 同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上。
  根据以上原理,就可以将byte数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte数组了。  
  二 、16进制的意义:
  1、用于计算机领域的一种重要的数制。
  2、对计算机理论的描述,计算机硬件电路的设计都是很有益的。比如逻辑电路设计中,既要考虑功能的完备,还要考虑用尽可能少的硬件,十六进制就能起到一些理论分析的作用。比如四位二进制电路,最多就是十六种状态,也就是一种十六进制形式,只有这十六种状态都被用上了或者尽可能多的被用上,硬件资源才发挥了尽可能大的作用。
  3、十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数。

拿汉字的例子来说吧
每个汉字在机器内部的机内码是唯一的

按你说的,“我”的机内码是CED2,这样的话,是要在输出的时候进行转换成汉字,输出包括屏幕和打印机输出等。

一般是按照规则将机内码转换成区位码,然后到区位码这个“表”中去查询即可。
机内码转换:CED2 转换成 十六进制区位码为 2E32
2E32每两位换成十进制的区位码就是4650

也就是说你要把区位码存在一个表中或数组中,然后用区位码进行查询,区位码就行号和列号,这样就可以输出汉字字符了。通常这个区位码表是按自己的需求,来进行优化的,因为可能不需要存所有的汉字,这个表通常叫做字模库或者字形库,都是为了输出用的。

我字的国标编码是CED2。
中文国标文件按 编码字节顺序排列。
我字为顺序两子节: 0xce 0xd2
中文国标文件