代码之家  ›  专栏  ›  技术社区  ›  live-love

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

  •  0
  • live-love  · 技术社区  · 6 年前

    为什么这样不行?

    //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 回复  |  直到 6 年前
        1
  •  0
  •   Peter Lawrey    6 年前

    您不需要提供索引

    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); 
    
        2
  •  0
  •   live-love    6 年前

    多亏了索蒂里奥斯,以下是正确答案:

    //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);