0

状況を簡単に説明し、質問に移ります。

デバイス(カード)にデータを書き込み/読み取るアプリがあります。ここにいくつかのサンプルコードがあります。

最初に、ユーザーは 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"

前回同様の質問をしたとき、人々は使用されているバイト形式、エンディアンなどに疑い/関心を寄せていました。私の質問は、上記で使用されているエンディアンを教えてもらえますか? それとも固定フォーマットですか?エンディアンの問題を予期する必要がありますか?

4

1 に答える 1

0

実際の 16 進数はビッグ エンディアンの方法で解釈されていますが、コードはエンディアンに依存しないように見え、コンピューターのエンディアンに関係なく動作するはずです。

于 2013-09-19T21:00:17.500 に答える