Unicode UTF8十六进制代码点与十进制不匹配

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 为什么会出现这种差异

我正在开发一个程序,它接受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的十进制”,是不正确的

您如何解释十六进制值
E2
82
AC

十六进制
E2
=hex
E
*16+hex
2
=14*16+2=226

十六进制
82
=hex
8
*16+hex
2
=8*16+2=130

十六进制
AC
=hex
A
*16+hex
C
=10*16+12=172

因此,十六进制值E2 82 AC(€符号)实际上是十进制的226 130 172

我认为您的陈述“十六进制值E282 AC(€符号)是十进制的14844 588”,是不正确的

您如何解释十六进制值
E2
82
AC

十六进制
E2
=hex
E
*16+hex
2
=14*16+2=226

十六进制
82
=hex
8
*16+hex
2
=8*16+2=130

十六进制
AC
=hex
A
*16+hex
C
=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
。你在比较两件不同的事情。你让空间迷惑了你。