/ / Formatage et écriture de données - c ++

Formatage et écriture de données - c ++

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 № 1

Les 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.