web-dev-qa-db-fra.com

Quelqu'un peut-il expliquer Hex les offsets?

J'ai téléchargé l'atelier heex et on m'a dit de lire un fichier .dbc.

Il devrait contenir 28 315 si vous avez lu OFFSET 0x04 et 0x05

Je ne suis pas sûr comment faire ça? Qu'est-ce que 0x04 signifie?

21
user20256

0x04 est hexadé pour 4 (le 0x est juste une convention de préfixe commune pour la représentation de la base 16 - car beaucoup de gens pensent en décimal), ce qui serait la quatrième octet (puisqu'ils disent décalage, ils comptent probablement le premier octet comme octet 0, donc offset 0x04 serait le 5ème octet).

Je suppose qu'ils disent que les 4ème et la 5e octet ensemble seraient ensemble 28315, mais ont-ils dit si cela est petit-Endian ou Big-Endian?

28315 (décimal) est 0x6E9B en notation hexadécimale, probablement dans le fichier en ordre 0x9b 0x6e si c'est un peu-Endian.

Remarque: Le petit-Endian et Big-Endian se rapportent aux octets de commande sont écrits. Humains typiques écriture notation décimale et hexadécimale de manière abusive, donc:

256 serait écrit comme 0x0100 (les chiffres à gauche sont la plus grande échelle)

Mais cela prend deux octets et les systèmes Little-Endian vont d'abord écrire l'octet bas: 0x00 0x01. Les systèmes Big-Endian écriront d'abord le Haut-octet: 0x01 0x00.

Généralement, les systèmes Intel sont petits-Endian et d'autres systèmes varient.

12
Cade Roux

Pensez à un fichier binaire comme une éventail linéaire d'octets.

0x04 serait le 5ème (dans un tableau basé sur 0) dans le tableau et 0x05 serait le 6ème.

Les deux valeurs de 0x04 et 0x05 peuvent être organisées pour créer le numéro 28.315.

Étant donné que la valeur que vous lisez est 16 bits, vous devez avoir une valeur de bittshift sur, puis OR eux ensemble, c'est-à-dire si vous manipulez le fichier en C #, vous utiliseriez quelque chose comme ceci:

int value = (ByteArray[4] >> 8) | ByteArray[5]);

J'espère que cela aide à expliquer comment les adresses hexagonales fonctionnent.

3
FlySwat

C'est le 4ème et le 5ème code XX Votre visionnage ...

[.____] 1 2 3 4 5 6 [.____] 01 AB 11 7B FF 5A [.____]

Donc, le 0x04 et 0x05 est "7b" et "FF".

En supposant que vous dites, dans votre cas 7BFF devrait être égal à la valeur souhaitée.

Ht

2
vIceBerg

0x04 dans Hex est de 4 en décimal. 0x10 dans Hex a 16 ans en décimal. calc.exe peut convertir entre hex et décimale pour vous.

Le décalage 4 signifie 4 octets dès le début du fichier. Offset 0 est le premier octet du fichier.

1
John Millikin

Regardez les octets 4 et cinq, ils doivent avoir les valeurs 0x6e 0x9b (ou 0x9b 0x6e) en fonction de votre endianesse.

1

Démarrer ICI . Une fois que vous avez appris à lire des valeurs hexadécimales, vous serez de bien meilleure forme pour résoudre votre problème.

0
Mark Bessey