ByteBuffer-将long转换为char数组,反之亦然

时间:2018-10-01 17:42:40

标签: java bytebuffer

我正在尝试将long转换为4个字符的数组。

似乎最后一个字符没有被写入缓冲区。

为什么这不起作用?

//convert long to char array

long longValZ = 219902744986400000L;

ByteBuffer bbX = ByteBuffer.allocate(8);
bbX.putLong(longValZ); 
//longValZ = 219902744986400000

char [] charArr1 = new char[4];
charArr1[0] = bbX.getChar(0);
charArr1[1] = bbX.getChar(1);
charArr1[2] = bbX.getChar(2);
charArr1[3] = bbX.getChar(3);

long longValX = bbX.getLong(0); 
//longValX = 219902744986400000


//convert char array to long

ByteBuffer bbY = ByteBuffer.allocate(8);

bbY.putChar(0,charArr1[0]);
bbY.putChar(1,charArr1[1]);
bbY.putChar(2,charArr1[2]);
bbY.putChar(3,charArr1[3]);

long longValY = bbY.getLong(0); 
//longValY = 219902744985600000 --> why is longValY different than longValZ ?

2 个答案:

答案 0 :(得分:0)

感谢Sotirios,这是正确的答案:

//convert long to char array

long longValZ = 219902744986400000L;

ByteBuffer bbX = ByteBuffer.allocate(8);
bbX.putLong(longValZ); 

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



//convert char array to long

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

long longValY = bbY.getLong(0); 

答案 1 :(得分:0)

您不需要提供索引

long longValZ = 219902744986400000L;

ByteBuffer bbX = ByteBuffer.allocate(8);
bbX.putLong(longValZ); 

char[] charArr1 = new char[4];
for (int i = 0; i < charArr1.length; i++)
   charArr1[i] = bbX.getChar();



//convert char array to long

ByteBuffer bbY = ByteBuffer.allocate(8);
for (int i = 0; i < charArr1.length; i++)
    bbY.putChar(charArr1[i]);

long longValY = bbY.getLong(0);