Alguém pode explicar compensações hexadecimais para mim?
-
02-07-2019 - |
Pergunta
Eu transferi Hex Workshop, e me disseram para ler um arquivo .DBC.
Deve conter 28315 se você ler compensada 0x04 e 0x05
Estou inseguro como fazer isso? Que faz 0x04 média?
Solução
0x04 é hexadecimal para 4 (o 0x é apenas uma convenção de prefixo comum para base 16 representação de números - uma vez que muitas pessoas pensam em decimal), e que seria o quarto byte (uma vez que eles estão dizendo offset, eles provavelmente contar o primeiro byte como byte 0, então compensado 0x04 seria o 5º byte).
Eu acho que eles estão dizendo que o 4º e 5º byte juntos seria 28315, mas eles dizem que se este é little-endian ou big-endian?
28315 (decimal) é 0x6E9B em notação hexadecimal, provavelmente no arquivo, a fim 0x9B 0x6E se é little-endian.
Nota: Little-endian e big-endian referem-se a ordem bytes são escritos. Os seres humanos típico notação escrita decimal e hexadecimal de um modo big-endian, assim:
256 iria ser escrito como 0x0100 (dígitos à esquerda são a maior escala)
Mas isso leva dois bytes e sistemas de little-endian vai escrever o byte baixo primeiro: 0x00 0x01. sistemas Big-endian vai escrever o high-byte primeiro:. 0x01 0x00
<> P Normalmente sistemas Intel são little-endian e outros sistemas variar.Outras dicas
Pense em um arquivo binário como uma matriz linear de bytes.
0x04 seria o 5º (em uma matriz baseada 0) elemento na matriz e 0x05 seria o 6º.
Os dois valores em 0x04 e 0x05 pode ser OR'ed em conjunto para criar o número 28,315. |
Uma vez que o valor que você está lendo é de 16 bits, você precisa bitshift um valor ao longo e depois OR-los juntos, ou seja, se você estava manipulando o arquivo em c #, você usaria algo como isto:
int value = (ByteArray[4] >> 8) | ByteArray[5]);
Esperamos que isso ajude a explicar como os endereços hexadecimais trabalho.
É o 4º eo código XX 5ª a sua visualização ...
1 2 3 4 5 6 01 AB 11 7B FF 5A
Assim, o 0x04 e 0x05 é "7B" e "francos franceses".
Assumindo que você está dizendo, no seu caso 7BFF deve ser igual ao seu valor desejado.
HTH
0x04 em hexadecimal é 4 em decimal. 0x10 em hexadecimal é 16 em decimal. calc.exe
pode converter entre hexadecimal e decimal para você.
Offset 4 significa 4 bytes desde o início do arquivo. Offset 0 é o primeiro byte no arquivo.
Olhe para bytes 4 e cinco devem ter os valores 0x6E 0x9B (ou 0x9B 0x6E), dependendo do seu endianess.
aqui . Uma vez que você aprender a ler valores hexadecimais, você estará em muito melhor forma de realmente resolver o seu problema.