2

我想将 long 值转换为 char 序列,就像这里的计算器一样

我真的不知道该值如何转换为 ASCII 序列(或者它是否正确)。我认为 ASCII 值是 8 位长,这意味着我必须将长值转换为二进制,然后将其拆分为 8 位块,对吗?

4

3 回答 3

3

严格来说,ASCII 字符是 7 位长,我们通常只是在开头添加一个额外0的字符以获得 8 位。ASCII 扩展(例如 ISO 8859)具有 8 位长字符。您链接的计算器似乎正在使用这些扩展之一。

在 Java 中,long 有 64 位(其中一位用于符号),因此您确实可以拥有 8 块 8 位长字符。

首先,您必须将 long 转换为字节数组(并非所有问题都与这种情况相关,但其中一些问题 - 特别是提到 ByteBuffer 的部分)。

byte[] bytes = ByteBuffer.allocate(8).putLong(someLong).array();

获得数组后,使用简单的强制转换将每个字节转换为字符。

编辑:您可以使用java.lang.String(byte[])构造函数,而不是手动转换每个字符。

String str = new String(bytes);

请注意,这将使用平台的默认字符集。如果这不是可取的,您可以使用也采用字符集的构造函数之一。

于 2013-10-07T19:05:27.577 回答
0

没有。有几种方法可以做到这一点。一种方法是使用 java.math.BigInteger,它有一个名为 toByteArray() 的方法。如果它适合您的问题,请尝试一下。

于 2013-10-07T19:03:46.567 回答
0

尝试使用此代码将 long 值转换为 4 字符数组。

//convert long to char array

long longValIn = 229902744986400000L;

ByteBuffer bb1 = ByteBuffer.allocate(8);
bb1.putLong(longValIn); 

char [] charArr = new char[4];
charArr[0] = bb1.getChar(0);
charArr[1] = bb1.getChar(2);
charArr[2] = bb1.getChar(4);
charArr[3] = bb1.getChar(6);


//convert char array to long

ByteBuffer bb2 = ByteBuffer.allocate(8);
bb2.putChar(0,charArr[0]);
bb2.putChar(2,charArr[1]);
bb2.putChar(4,charArr[2]);
bb2.putChar(6,charArr[3]);

long longValOut = bb2.getLong(0); 
于 2018-10-01T18:05:34.020 回答