Python 将 int 转换为 unsigned short 然后返回 int

Python convert int to unsigned short then back to int

使用此函数将坐标 x,y 编码为整数

# Convert X Y position to MAP file index
def index_from_xy(x, y):
  return (y - 16) << 16 | (x & 65535)

x好像被转换成了unsigned short

x 和 y 在 [-32767 32767]

范围内

将索引转换为 x, y 元组的函数是什么?

所有 python 整数都在引擎盖下很长(除非你玩的是更大的数字)。

要提取x和y,只需将上述函数的步骤反转即可。

def int_to_signed_short(value):
    return -(value & 0x8000) | (value & 0x7fff)

def xy_from_index(index):
    x, y = index & 65535, (index >> 16) + 16
    return map(int_to_signed_short, [x, y])

更详细地说,您的函数获取两个数字并将它们以二进制形式移动,这样它们就不会相互重叠。

x & 65535只保留x最右边的16位,因为65535在二进制中是16个1。详细了解 bitwise AND

(y - 16) << 16 将数字 y - 16 向左移动 16 位。所以如果你的数字是二进制的 XXXXX,它将变成 XXXXX0000000000000000。详细了解 bitwise shift

A | B 将对两个数字的位进行或运算。由于A右边有16个0,B最多16位长,所以A和B不会互相干扰对方的位。详细了解 bitwise OR

一旦你明白了这一点,你就会清楚我的函数是如何与这个相反的。

例子

>>> index = index_from_xy(1234, 5678)
>>> index
371066066
>>> xy_from_index(index)
(1234, 5678)