如何用js实现java中int强制转换为byte类型,即(byte)

前端开发一枚,最近有个需求需要将android端的功能移植到h5上,对java中(byte)的强制转换原理看得云里雾里,希望有大佬可以提供一些靠谱的相关文章

阅读 5.3k
2 个回答

javascript 中的数值类型没有严格区分 int, byte, long ……,只有一个 number,可以表示整数,也可以表示浮点数(参考:安全整数)。

JS 中如果一个数在 -128 ~ 127 之间,就可以认为是一个 byte,如果在 0~255 之间就可以认为是一个无符号 byte……

当然,一般要用 byte 的时候,通常都是为了进行二进制数据处理,会以数组的形式存在。在 JS 中进行二进制数组处理,可能需要使用 ArrayBuffer,或者更具体一点的 Int8Array 来处理。有可能还会用到 DataView

如果只是作为二进制数据来用,整数的 178 和 byte 的 -78 都可以用 0xb2 来表示……当二进制数据来用的时候是不需要转换的。如果非要转换的话,这样:

const v = new DataView(new ArrayBuffer(4));
v.setInt32(0, 178);
const b = v.getInt8(3);       // int32 是 4 个字节,这里取最后一个字节,即偏移 3 字节

如果能保证数值都在 255 以内(不能保存也无所谓,只要允许数据截断),可以这样

const v = new DataView(new ArrayBuffer(1));
v.setUint8(0, 178);
v.getInt8();

如边城所说,在javascript中没有int、char类型概念的。
你的 int a = 178(byte)a 结果以int输出为-78,其实是这个数的直接低8位(一个字节中)的编码。
本身178int类型(现在普遍是4字节长,起码也是2字节长)中的编码是0000000 00000000 00000000 10110010,在处理为(byte)a 时,保留了10110010部分,且在以有符号(byte)类型显示(相当于C/C++ 中的char型,其值范围是-128 至 127)时,因为最高位为符号位,为1表示负值,其余部分是负值部分的补码,为0110010,对应的数据原码为1001110(一个负数值原码、反码、补码的关系是:反码=按位取反(源码),补码=反码+1 ),这个原码对应的数字是78,所以整个10110010对应数字-78

不过涉及这样运算的一般会用位运算来处理,而不会关注具体这个编码显示数据,即在处理中一般会用到10110010这样的二进制信息,而不关注这个信息在十进制下面向人以char/byte的显示值。此外大多数使用位、byte的环境实例中,即使要用数据进行计算,也大多数是基于无符号系统的,比如计算机表示RGB颜色时,每个8bit的单独颜色值就是8位无符号数,类似的还有透明度数据,真正用到位运算、byte处理中很少是有符号的值。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏