【问题标题】:How to convert one byte and 4 bits from another byte to a short using bitwise?如何使用按位将一个字节和 4 位从另一个字节转换为短字节?
【发布时间】:2022-05-04 21:33:47
【问题描述】:

使用按位,我们如何以最高效的方式将这 3 个字节转换为这种模式中的两个短裤?:
(11111111)(01111110)(10000001) 3 个字节
(111111110111)(111010000001) 2 短裤
找到了一种将两个字节组合成一个短字节的方法,但是对于一个字节和 4 位的组合,尝试了几个小时的各种方法都没有成功。谢谢你的帮助。

byte byt1 = -1; // 11111111
byte byt2 = 126;// 01111110
byte byt3 = 129;// 10000001
short s_1_2 = (short) ((byt1 << 8) | (byt2 & 0xFF));
// value is 1111111101111110
short s1 = // want to be 111111110111
short s2 = // want to be 111010000001
  • 如果你从字节到字符串,然后到短?这种方法可以与任何组合一起使用。所以最终你将失去 1 和 0 中的任何一个。
  • ...以及来自另一个字节的 4 位....哪个4位?
  • @g00se 作为问题中的模式

标签: java bit-manipulation bitwise-operators bit-shift bitwise-and


【解决方案1】:

其中一种可能性如下:

short s1 = (short) (((byt1 & 0xff) << 4) | ((byt2 & 0xf0) >> 4));
short s2 = (short) (((byt2 & 0x0f) << 8) | (byt3 & 0xff));

【讨论】:

  • 谢谢你。你能解释一下如何将这两条短裤组合成一个int吗?考虑将111111110111111010000001 变成111111110111111010000001
  • 我是这样做的:int int_num = ((s1 &amp; 0xfff)&lt;&lt;12)|(s2 &amp; 0xfff); System.out.println(Integer.toBinaryString(int_num)); 结果是正确的,但是如果有什么注意事项要提?
  • @Eftekhari 你的方法是正确的。
猜你喜欢
  • 2023-02-24
  • 2013-11-13
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多