gpt4 book ai didi

java - 如何将数字转换为字节,类似于 postgres 中的 java

转载 作者:行者123 更新时间:2023-11-29 12:49:35 27 4
gpt4 key购买 nike

我正在尝试在 Postgres 中复制一些 java 代码。

我需要执行的操作是将 Java BigInteger 转换为 byte array

Java 代码:

public class Main {
public static void main(String[] args) {
BigInteger n = new BigInteger("1677259342285725925376");
System.out.println(Arrays.toString(n.toByteArray()));
}

}

输出: [90, -20, -90, 53, 78, -38, 2, -128, 0]

Postgres 代码:

select  numeric_send(1677259342285725925376);

输出: "\000\006\000\005\000\000\000\000\000\020\036-$~\013)\012\025\000 "

使用 numeric_send 将数字转换为 bytea http://www.leadum.com/downloads/dbscribe/samples/postgresql/web_modern/function/main/643567399.html

为了检查 Java 控制台中的输出,我在匿名 block 下面写了

do 
$$
declare
bytes bytea;
begin
bytes := numeric_send(1677259342285725925376);
for i in 0..length(bytes)-1 loop
raise notice '%', get_byte(bytes,i);
end loop;
end; $$

现在输出打印为:

NOTICE:  0
NOTICE: 6
NOTICE: 0
NOTICE: 5
NOTICE: 0
NOTICE: 0
NOTICE: 0
NOTICE: 0
NOTICE: 0
NOTICE: 16
NOTICE: 30
NOTICE: 45
NOTICE: 36
NOTICE: 126
NOTICE: 11
NOTICE: 41
NOTICE: 10
NOTICE: 32
NOTICE: 21
NOTICE: 0

根据我的说法,输出应该与我在两者中转换为字节数组的输出相同。请帮助我如何实现相同的目标。

谢谢

最佳答案

PostgreSQL 的 numeric 和 Java 的 java.math.BigInteger 有不同的二进制表示。

numeric 是一个二进制编码的十进制数,您也有 varlena header 。

尽可能避免使用数据类型的内部二进制表示——这可能取决于诸如机器架构的字节顺序之类的事情。

关于java - 如何将数字转换为字节,类似于 postgres 中的 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57622178/

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