首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDBC驱动程序PostgreSQL:解析编码为BYTEA对象的数字

JDBC驱动程序PostgreSQL:解析编码为BYTEA对象的数字
EN

Stack Overflow用户
提问于 2017-05-28 12:16:51
回答 2查看 459关注 0票数 1

我的关系是,对于每一条记录,都有BYTEA列(UTF-8),按以下顺序编码3个数字:

字节0-1:数字1

字节2-3:数字2

字节4-6:数字3

如何将二进制数据解析为可读数字?

目前我有这种情况,不知道如何继续:

代码语言:javascript
复制
Class.forName(dbDriver);
Connection connection = DriverManager.getConnection(dbUrl, dbUser, dbPass);
Statement st = connection.createStatement();
String query = "SELECT ...";
ResultSet rs = st.executeQuery(query);
while (rs.next()) {
    byte[] data = rs.getBytes(1);
    //TODO Parse
}

谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-28 12:31:44

这取决于数字的存储方式。

它们是二进制的吗?

他们是署名

它们是大的还是小的恩甸

假设前两个是肯定的,你可以使用位操作。

代码语言:javascript
复制
// Little-endian
short num1 = (short) ((data[0] & 0xFF) | (data[1] & 0xFF) << 8);

// Big-endian
short num1 = (short) ((data[0] & 0xFF) << 8 | (data[1] & 0xFF));

但是使用ByteBuffer可能更容易

代码语言:javascript
复制
ByteBuffer buf = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN);
short num1 = buf.getShort();
short num2 = buf.getShort();
short num3 = buf.getShort();

默认情况下,ByteBufferBIG_ENDIAN

票数 2
EN

Stack Overflow用户

发布于 2017-05-28 12:26:15

你能试试这个吗?

用于字符串:

代码语言:javascript
复制
    String tatto = "my tatto"; //for example
    byte[] array = tatto.getBytes(); // Or any bytes
    String s = new String(array);
    System.out.println(s);

对于byte[]:

代码语言:javascript
复制
    byte[] data = new byte[]{ 1, 16, 84, 2, 101, 110, 83, 111};
    long val = 0;
    for (int i = 0; i < data.length; i++)
    {
       val = (val << 8) + (data[i] & 0xff);
    }
    System.out.println(val);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44227220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档