java将long值转换为char序列

时间:2013-10-07 18:56:00

标签: java char long-integer

我想将一个long值转换为一个char序列,就像在这个caluculator here中一样 我真的不知道如何将该值转换为ASCII序列(或者如果它甚至是正确的)。我认为ASCII值是8位长,这意味着我必须将长值转换为二进制,然后将其拆分为8位块,这是正确的吗?

3 个答案:

答案 0 :(得分:3)

严格来说,ASCII字符长度为7位,我们通常只需在开头添加一个0即可获得8位。 ASCII扩展(例如ISO 8859)具有8位长字符。您链接的计算器似乎正在使用其中一个扩展程序。

在Java中,long有64位(其中一个位用于符号),所以你确实可以有8个8位长的字符块。

首先,你必须convert your long to a byte array(并非所有这个问题都与这个案例有关,但其中一些是 - 尤其是提到ByteBuffer的部分)。

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

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

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

String str = new String(bytes);

请注意,这将使用平台的默认字符集。如果不希望这样,您可以使用其中一个也采用字符集的构造函数。

答案 1 :(得分:0)

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

答案 2 :(得分: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);