变形怪..。
我必须做点什么,这会让我心烦意乱。
我得到一个字符串形式的十六进制值(例如:"AFFE"),并且必须决定是否设置了Byte one的第5位。
public boolean isBitSet(String hexValue) {
//enter your code here
return "no idea".equals("no idea")
}
有什么提示吗?
致以敬意,
博斯科普
发布于 2012-04-25 22:13:47
最简单的方法是将String
转换为int
,并使用位算术:
public boolean isBitSet(String hexValue, int bitNumber) {
int val = Integer.valueOf(hexValue, 16);
return (val & (1 << bitNumber)) != 0;
} ^ ^--- int value with only the target bit set to one
|--------- bit-wise "AND"
发布于 2012-04-25 22:27:23
假设字节1由最后两位数字表示,字符串的大小固定为4个字符,那么答案可能是:
return (int)hexValue[2] & 1 == 1;
正如你所看到的,你不需要将整个字符串转换成二进制来计算第五位,它确实是第三个字符的LSB。
现在,如果十六进制字符串的大小是可变的,那么您将需要如下内容:
return (int)hexValue[hexValue.Length-2] & 1 == 1;
但是,因为字符串的长度可以小于2,所以这样会更安全:
return hexValue.Length < 2 ? 0 : (int)hexValue[hexValue.Length-2] & 1 == 1;
根据您认为字节1和位5的不同,正确答案可能会有所不同。
发布于 2012-04-25 22:14:04
这个怎么样?
int x = Integer.parseInt(hexValue);
String binaryValue = Integer.toBinaryString(x);
然后,您可以检查字符串以检查您所关心的特定位。
https://stackoverflow.com/questions/10317477
复制相似问题