Eu tenho uma matriz de 8 bytes e quero convertê-la em seu valor numérico correspondente.
por exemplo
byte[] by = new byte[8]; // the byte array is stored in 'by'
// CONVERSION OPERATION
// return the numeric value
Quero um método que execute a operação de conversão acima.
new BigInteger(by).longValue()
Respostas:
Supondo que o primeiro byte seja o byte menos significativo:
É o primeiro byte o mais significativo, então é um pouco diferente:
Substitua long por BigInteger , se você tiver mais de 8 bytes.
Agradeço a Aaron Digulla pela correção de meus erros.
fonte
value += ((long)by[i] & 0xffL) << (8 * i);
Pode-se usar os programas
Buffer
fornecidos como parte dojava.nio
pacote para realizar a conversão.Aqui, a
byte[]
matriz de origem tem um comprimento de 8, que é o tamanho que corresponde a umlong
valor.Primeiro, a
byte[]
matriz é envolvida em umByteBuffer
e, em seguida, oByteBuffer.getLong
método é chamado para obter olong
valor:Resultado
Gostaria de agradecer ao dfa por apontar o
ByteBuffer.getLong
método nos comentários.Embora possa não ser aplicável nesta situação, a beleza do
Buffer
s vem com a observação de uma matriz com vários valores.Por exemplo, se tivéssemos uma matriz de 8 bytes e quiséssemos vê-la como dois
int
valores, poderíamos envolver abyte[]
matriz em umByteBuffer
, que é visto como a,IntBuffer
e obter os valores porIntBuffer.get
:Resultado:
fonte
Se este for um valor numérico de 8 bytes, você pode tentar:
Se este for um buffer de caracteres UTF-8, você pode tentar:
fonte
Simplesmente, você pode usar ou referir-se à lib guava fornecida pelo google, que oferece métodos úteis para conversão entre array longo e byte. Meu código de cliente:
fonte
Você também pode usar BigInteger para bytes de comprimento variável. Você pode convertê-lo em Long, Integer ou Short, o que for mais adequado às suas necessidades.
ou para denotar polaridade:
fonte
Código conversor java completo para todos os tipos primitivos de / para matrizes http://www.daniweb.com/code/snippet216874.html
fonte
Cada célula na matriz é tratada como int sem sinal:
fonte