状況を簡単に説明し、質問に移ります。
デバイス(カード)にデータを書き込み/読み取るアプリがあります。ここにいくつかのサンプルコードがあります。
最初に、ユーザーは 16 進文字列を入力します。たとえば、" 00000000000000000000AABBEEAABBEE
" (これは 16 バイトである必要があります)。
このデータをカードに書き込むために、バイト配列に変換されます。
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
}
これで、このバイト配列は次のように簡単にデバイスに送信されます。
unsigned char sendBuff[16];
for(int i=0;i<16;i++)
sendBuff[i]=array1[i];
そして、送信コマンドを呼び出しますSend(sendBuff, 16)
。
読み取りも簡単です。これを呼び出すと、保存したバイト配列が含まれるようになりReceive(receiveBuffer);
ました。receiveBuffer
これを 16 進数に変換します。
for(k=0;k<16;k++)
{
data[k*2]=hexval[((receiveBuffer[k]>>4)&0xF)];
data[(k*2)+1]=hexval[receiveBuffer[k]&0x0F];
}
そして、次のdata
内容が含まれるようになりました: " 00000000000000000000AABBEEAABBEE
"
前回同様の質問をしたとき、人々は使用されているバイト形式、エンディアンなどに疑い/関心を寄せていました。私の質問は、上記で使用されているエンディアンを教えてもらえますか? それとも固定フォーマットですか?エンディアンの問題を予期する必要がありますか?