首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查十六进制字符串中是否设置了位?

如何检查十六进制字符串中是否设置了位?
EN

Stack Overflow用户
提问于 2012-04-25 22:10:33
回答 4查看 3.6K关注 0票数 3

变形怪..。

我必须做点什么,这会让我心烦意乱。

我得到一个字符串形式的十六进制值(例如:"AFFE"),并且必须决定是否设置了Byte one的第5位。

代码语言:javascript
运行
复制
public boolean isBitSet(String hexValue) {
    //enter your code here
    return "no idea".equals("no idea")
}

有什么提示吗?

致以敬意,

博斯科普

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-25 22:13:47

最简单的方法是将String转换为int,并使用位算术:

代码语言:javascript
运行
复制
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"
票数 8
EN

Stack Overflow用户

发布于 2012-04-25 22:27:23

假设字节1由最后两位数字表示,字符串的大小固定为4个字符,那么答案可能是:

代码语言:javascript
运行
复制
return (int)hexValue[2] & 1 == 1;

正如你所看到的,你不需要将整个字符串转换成二进制来计算第五位,它确实是第三个字符的LSB。

现在,如果十六进制字符串的大小是可变的,那么您将需要如下内容:

代码语言:javascript
运行
复制
return (int)hexValue[hexValue.Length-2] & 1 == 1;

但是,因为字符串的长度可以小于2,所以这样会更安全:

代码语言:javascript
运行
复制
return hexValue.Length < 2 ? 0 : (int)hexValue[hexValue.Length-2] & 1 == 1;

根据您认为字节1和位5的不同,正确答案可能会有所不同。

票数 1
EN

Stack Overflow用户

发布于 2012-04-25 22:14:04

这个怎么样?

代码语言:javascript
运行
复制
 int x = Integer.parseInt(hexValue);
 String binaryValue = Integer.toBinaryString(x);

然后,您可以检查字符串以检查您所关心的特定位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10317477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档