java - java中的 "out |= ( in & 0x7F ) << ( bytes++ * 7 );"语句是什么意思?

标签 java minecraft bungeecord

当我看到他们的 VarInt 读取代码来读取数据包长度时,我正在查看 Minecraft 的内部数据包处理。作为一个没有任何java类(class)的java开发人员,当我看到声明out |= ( in & 0x7F ) << ( bytes++ * 7 );时我很困惑。有人可以向我解释一下吗?提前致谢!

如果你想要完整的代码,只需检查 BungeeCord 的 Github 上的 readVarInt 函数 https://github.com/SpigotMC/BungeeCord/blob/master/protocol/src/main/java/net/md_5/bungee/protocol/DefinedPacket.java#L70 .

最佳答案

我没有查看您包含的链接,但我希望在循环中调用此行,以将存储为 7 位值集合的数字转换回 int 或 long。

您给出的行可以扩展为:

int value = in & 0x7F;            // Grab 7 bits of data from "in"
int shift = bytes * 7;            // Calculate shift amount based on byte index
bytes = bytes+1;                  // Increment byte index (from bytes++)
out = out | (value << shift);     // Shift value and OR into output integer/long

关于java - java中的 "out |= ( in & 0x7F ) << ( bytes++ * 7 );"语句是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22924979/

相关文章:

Java如何使用一个库的多个版本可能使用类加载器

java - 如何更改目标 URL

JAVA布局情况

java - 取消伤害动画

java - 将 MySQL 数据库加载到 Java Swing 应用程序中

java - minecraft forge 1.10 创建工艺配方导致 minecraft 崩溃

java - 遍历一个字符串并为每个字符添加不同的值作为前缀

velocity - 如何在 Velocity 上使用 BungeeCord 消息 channel ?

java - 从 HttpServletRequest 中提取上下文路径和其他 URL 信息

java - 在多个线程中洗牌数组