gpt4 book ai didi

java - 从二进制数据中提取某些位

转载 作者:行者123 更新时间:2023-12-02 03:59:41 24 4
gpt4 key购买 nike

我有一个如下所示的二进制数:

00000000 00000000 00000011 00001101 = 781 整数值 = 整数名称“打包”

我如何能够使用java中的按位将每个值提取为单独的整数值。就像下面这样:

int a = (function) = 00000000;
int b = (function) = 00000000;
int c = (function) = 00000011;
int d = (function) = 00001101;

如果你能看到我在那里做什么..我希望前8个成为一个整数,下一个成为第二个整数,依此类推..我认为你在java中使用按位来做到这一点,但我完全不确定。任何帮助表示赞赏。抱歉,我对这种事情完全陌生,真的需要帮助,谢谢!基本上(函数)应该等于这样的东西:

packed >> 5; (I know this isn't nearly right that is why i am needing help on this)...

这个问题在两天前得到了回答,它运行得很好,但现在它坏了......我不知道为什么......这是我用来执行此操作的方法:

public static int getNthByte(int n, int packed) 
{
// shift the desired bits into the last 8 bits
int shifted = packed >> (8 * n);
// and now get those bits
int masked = 0x000000FF & shifted;
return masked;
}

但是当我输入这行代码时:我得到了这个答案:

int x = 781;
System.out.println(getNthByte(3, x)); (Which should give me 00001101, in integer value)

我打印以下内容:

0
为什么?昨天这对我来说效果很好......但我注意到当我这样做时:

System.out.println(getNthByte(5, x));

它给了我第三位:

3

哪个是正确的...

tl;博士这个方法昨天工作正常,现在一切都搞砸了,我需要帮助修复它,或者可能是我的错误?我不知道..昨天我输入了 getNthByte(3,x) 它给了我与 00001101 相关的正确整数值...

感谢任何帮助..也许该方法有问题?还是只有我这样?

最佳答案

在Java中,当你要处理二进制数据时,你的脑海中应该立刻浮现出一个词:ByteBuffer :

final ByteBuffer buf = ByteBuffer.allocate(4); // sizeof(int)
buf.putInt(yourInt);

返回第 n 个字节现在非常简单:

return (int) buf.get(byteIndex);

请注意,您假设您的整数采用大端顺序;幸运的是,你是对的:Java 就是这种情况。总是。无论底层架构的字节顺序如何。

关于java - 从二进制数据中提取某些位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17156116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com