我在 plpgsql 中写了一个函数,函数中unpack_numeric_bytes
最重要的部分是:
FOR i IN 1..v_length LOOP
v_val := v_val + (get_byte(v_bytes, v_byte_index) << v_bit_shift);
v_bit_shift := v_bit_shift + 8;
v_byte_index := v_byte_index + 1;
END LOOP;
它一直运行良好,直到我发现它没有正确解码的价值......它可能太明显了,但我没有看到它。
电话是:select unpack_numeric_bytes(E'g\\363I\\274', array[4], 'f');
代码v_length
中有 4 个字节,它会尝试解码E'g\\363I\\274'
:{-1136004249}
.. 我注意到 2^32 - 1136004249 = 3158963047,这就是我正在寻找的正确答案!(使用python解包功能对其进行了测试)。
什么是扔掉它?我做错了什么?这是该功能第一次让我失望。
谢谢!