Je vais expliquer brièvement la situation et passer à la question.
J'ai une application qui écrit / lit des données sur un périphérique (carte). Voici un exemple de code.
D'abord, l'utilisateur entre une chaîne hexagonale, par exemple "00000000000000000000AABBEEAABBEE
"(Cela devrait être 16 octets).
Maintenant à écrire ces données à la carte, il est converti en tableau d'octets.
for(int i=0,m=0; i < size; i+=2,m++)
{
char ch1, ch2;
ch1=(char)str[i]; // str is hex string
ch2=(char)str[i+1];
int dig1, dig2;
if(isdigit(ch1)) dig1 = ch1 - "0";
else if(ch1>="A" && ch1<="F") dig1 = ch1 - "A" + 10;
else if(ch1>="a" && ch1<="f") dig1 = ch1 - "a" + 10;
if(isdigit(ch2)) dig2 = ch2 - "0";
else if(ch2>="A" && ch2<="F") dig2 = ch2 - "A" + 10;
else if(ch2>="a" && ch2<="f") dig2 = ch2 - "a" + 10;
array1[m] = (char)(dig1*16 + dig2); // output byte array
}
Maintenant, ce tableau d'octets est envoyé au périphérique, facilement comme ceci:
unsigned char sendBuff[16];
for(int i=0;i<16;i++)
sendBuff[i]=array1[i];
Et appelez une commande d'envoi, dites Send(sendBuff, 16)
;
La lecture est aussi facile, nous appelons Receive(receiveBuffer);
À présent receiveBuffer
contient un tableau d'octets que nous avons stocké. Nous le reconvertissons en sort:
for(k=0;k<16;k++)
{
data[k*2]=hexval[((receiveBuffer[k]>>4)&0xF)];
data[(k*2)+1]=hexval[receiveBuffer[k]&0x0F];
}
Et maintenant data
contient: "00000000000000000000AABBEEAABBEE
"
La dernière fois que j'ai posé une question similaire, les gens ont soulevésuspicion / intérêt pour le format d'octet utilisé, finalité, etc. Ma question est: pouvez-vous dire quelle finalité est utilisée ci-dessus? Ou est-ce un format fixe? Devrais-je m'attendre à des problèmes d'endianisme?
Réponses:
0 pour la réponse № 1Les chiffres hexadécimaux réels sont interprétés de manière big-endienne, mais le code semble être neutre en termes d’endianisme et devrait fonctionner quelle que soit l’environnement de votre ordinateur.