Java Android studio-字节操作-更改值
我对位操作有问题Java Android studio-字节操作-更改值,java,android,byte,operations,Java,Android,Byte,Operations,我对位操作有问题 int progress = slider.getProgress(); value of user input 然后我必须做左移位,把它改成十六进制 int shl = 1<<progress-1; String hexStr = Integer.toHexString(shl); 现在问题来了 如果用户设置为示例2,则为ok 0b100=0x04 但如果用户在命令[2]中设置了5 0b10000=hexStr=10,则会得到值0x0A 为什么它会改变价值 “
int progress = slider.getProgress(); value of user input
然后我必须做左移位,把它改成十六进制
int shl = 1<<progress-1;
String hexStr = Integer.toHexString(shl);
现在问题来了
如果用户设置为示例2,则为ok 0b100=0x04
但如果用户在命令[2]中设置了5 0b10000=hexStr=10,则会得到值0x0A
为什么它会改变价值
“但是,如果用户在命令[2]中设置了5 0b10000=hexStr=10,它将获得值=0x0A
为什么它会改变值?“ 它是正确的。你期望有什么不同的结果 例如:如果
progress
为5,则
- 像
1那样进行位移位我已经有一段时间没有使用位移位了,但是您确定您确实遇到了错误吗?若我还记得怎么做的话,那个么5是二进制的0101,当位向左移位时,它变成1010。用十六进制表示的10是A,这是您得到的值。如果用户设置为5,我只需要BT发送整个命令中的一个“1”,这意味着第5个led应该点亮10000,如果用户设置为10,则第10个led应该点亮100000000,我没有将十进制转换为二进制或十六进制,但用户输入告诉“1”应该在哪个位置,希望它是清晰的:)
byte bit = Byte.decode(hexStr) command[2]=bit;
int progress = 5; int shl = 1 << progress-1; //why?? String hexStr = Integer.toHexString(shl); String shlStr = Integer.toString(shl); String zeroStr = ""; byte bit = Byte.decode(hexStr); //command[2]=bit; System.out.println("shl result string : " + shlStr); System.out.println("Bytes string hex : " + hexStr); //# Padding for(int i = 0; i < (progress-1); i++) { zeroStr += "0"; } shlStr = "1" + zeroStr; //command[2]= Byte.decode(shlStr); System.out.println("Result string hex : " + zeroStr); System.out.println("shi padding string : " + shiStr);