2

当我看到他们的 VarInt 读取代码以读取数据包长度时,我正在环顾 Minecraft 的内部数据包处理。作为一个没有任何java课程的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

4

1 回答 1

2

我没有查看您包含的链接,但我希望在循环中调用此行,以将存储为 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
于 2014-04-08T00:09:40.393 回答