Unicode UTF8十六进制代码点与十进制不匹配
我正在开发一个程序,它接受unicode字符的十六进制值并将其转换为整数,然后转换为字节数组,然后转换为UTF-8字符串。例如,十六进制值E2 82 AC(€symbol)是14 844 588(十进制),但是,如果您在下面提供的网页上查看它的代码点值,它是226 130 172,这是一个很大的差异 如果按十进制对值进行排序,则它们不仅仅是将十六进制转换为十进制。显然,我对编码的理解不如我想象的那么好 E2 82 AC映射到226 130 172,而不是14844 588 为什么会出现这种差异 提前感谢。我认为您的陈述“十六进制值E282 AC(€符号)是14 844 588的十进制”,是不正确的 您如何解释十六进制值Unicode UTF8十六进制代码点与十进制不匹配,unicode,encoding,utf-8,hex,Unicode,Encoding,Utf 8,Hex,我正在开发一个程序,它接受unicode字符的十六进制值并将其转换为整数,然后转换为字节数组,然后转换为UTF-8字符串。例如,十六进制值E2 82 AC(€symbol)是14 844 588(十进制),但是,如果您在下面提供的网页上查看它的代码点值,它是226 130 172,这是一个很大的差异 如果按十进制对值进行排序,则它们不仅仅是将十六进制转换为十进制。显然,我对编码的理解不如我想象的那么好 E2 82 AC映射到226 130 172,而不是14844 588 为什么会出现这种差异
E2
、82
和AC
十六进制E2
=hexE
*16+hex2
=14*16+2=226
十六进制82
=hex8
*16+hex2
=8*16+2=130
十六进制AC
=hexA
*16+hexC
=10*16+12=172
因此,十六进制值E2 82 AC(€符号)实际上是十进制的226 130 172 我认为您的陈述“十六进制值E282 AC(€符号)是十进制的14844 588”,是不正确的
您如何解释十六进制值E2
、82
和AC
十六进制E2
=hexE
*16+hex2
=14*16+2=226
十六进制82
=hex8
*16+hex2
=8*16+2=130
十六进制AC
=hexA
*16+hexC
=10*16+12=172
因此,十六进制值E2 82 AC(€符号)实际上是十进制的226 130 172 不能将可变长度字节序列直接解释为数字。0x00E282AC实际上是14844588,但这只是巧合。十六进制的字节序列
0xE2
0x82
0xAC
分别是十进制的226
130
172
。单个数字14844588
(注意逗号,它们在您的问题中只是空格)是十六进制的0xE282AC
。十进制数是226
130
172
,而不是226130172
。你在比较两件不同的事情。你让空格把你弄糊涂了。你不能把可变长度的字节序列直接解释为一个数字。0x00E282AC实际上是14844588,但这只是巧合。十六进制的字节序列0xE2
0x82
0xAC
分别是十进制的226
130
172
。单个数字14844588
(注意逗号,它们在您的问题中只是空格)是十六进制的0xE282AC
。十进制数是226
130
172
,而不是226130172
。你在比较两件不同的事情。你让空间迷惑了你。