ByteBuffer - 将 long 转换为 char 数组,反之亦然
ByteBuffer - convert long to char array and vice versa
我正在尝试将 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 ?
感谢 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);
您无需提供索引
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);
我正在尝试将 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 ?
感谢 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);
您无需提供索引
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);