繁体   English   中英

为什么Java和Javascript中的字节数组表示形式不同?

[英]Why different byte array representation in Java and Javascript?

我试图同时在Java和Javascript中看到U的UTF-8字节。

在Javascript中,

new TextEncoder().encode("👍"); 返回=> [240, 159, 145, 141]

在Java中

"👍".getBytes("UTF-8")返回=> [-16, -97, -111, -115]

我使用与语言( JSJava )相对应的方法将这些字节数组转换为十六进制字符串,并且均返回F09F918D

实际上, -16 & 0xFF = = 240

我很好奇有关为什么两种语言选择不同的方式表示字节数组的信息。 我花了一段时间才弄清楚这一点。

在Java中,所有字节均已签名。 因此,一个字节的范围是从-128到127。但是,在Javascript中,返回的值只是简单地讲整数。 因此可以使用小数点表示,最大范围为255。

因此,如果将两个结果都转换为1字节的十六进制表示形式,则它们将是相同的: F0 9F 91 8D

说到Java 为什么决定消除无符号类型,那是另外一个讨论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM