/ / Formatowanie i zapisywanie danych - c ++

Formatowanie i zapisywanie danych - c ++

Wytłumaczę krótko sytuację i przejdę do pytania.

Mam aplikację, która zapisuje / odczytuje niektóre dane do urządzenia (karty). Oto przykładowy kod.

Najpierw użytkownik wprowadza ciąg szesnastkowy, powiedz: "00000000000000000000AABBEEAABBEE"(Powinno to być 16 bajtów).

Teraz, aby pisać dane te do karty są konwertowane na tablicę bajtową.

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
}

Teraz ta tablica bajtów jest wysyłana do urządzenia, w prosty sposób:

 unsigned char sendBuff[16];
for(int i=0;i<16;i++)
sendBuff[i]=array1[i];

I powiedz, powiedz, polecenie wysyłania Send(sendBuff, 16);

Czytanie jest również łatwe, nazywamy to Receive(receiveBuffer); Teraz receiveBuffer zawiera tablicę bajtów, którą zapisaliśmy. Konwertujemy je z powrotem na hex:

 for(k=0;k<16;k++)
{
data[k*2]=hexval[((receiveBuffer[k]>>4)&0xF)];
data[(k*2)+1]=hexval[receiveBuffer[k]&0x0F];
}

I teraz data zawiera: "00000000000000000000AABBEEAABBEE"

Ostatnim razem zadawałem podobne pytania, które padły ofiarąpodejrzenie / zainteresowanie używanym formatem bajtów, endianizmem itp. Moje pytanie brzmi: czy można użyć powyższej metody? Czy jest to jakiś ustalony format? Czy mogę spodziewać się problemów z endianizmem?

Odpowiedzi:

0 dla odpowiedzi № 1

Rzeczywiste cyfry heksadecymalne są interpretowane wielowymiarowo, ale kod wygląda jak endianness-neutralny i powinien działać bez względu na endianness twojego komputera.