0

スマートカードにデータを書き込んでいます。

カードに 16 進文字列を保存したい場合に、これがどのように行われるかをここで確認できます: Formatting and writing data - また、この投稿から、エンディアンの問題がないことがわかります。

これを考えると、通常、データは次のようにデバイスに保存されます。

unsigned char sendBuffer[20]; // This will contain the data I want to store + some header information

sendBuffer[0]=headerInfo;
sendBuffer[1]=data[0]; // data to store, byte array; should be 16 bytes or multiple of 16
sendBuffer[2]=data[1];
...
sendBuffer[16]=data[15];

Send(sendBuffer, length).ここで、call を呼び出しますdata。データを読み戻す方法についても、上記のリンクに記載されています。

  • 興味があります。カードに整数 153 (10 進数) を格納したいのですが、どうすればよいですか? sendBuffer(基本的には配列に埋め込む必要があると思いますよね?)

  • または、文字列「Hello world 123xyz」を保存/送信したい場合、これもどうすればよいですか?

ps。また、私は通常受信者であり、データを読み戻す必要があります。また、読み取ったメモリ ブロックによっては、そこに int を格納したか文字列を格納したかが事前にわかっている場合があります。

4

1 に答える 1

-1

あなたはこれを必要以上に複雑にしているようです。エンディアンの問題がないため、バッファから int を読み書きするのは簡単です。

// writing
*(int*)(sendBuffer + pos) = some_int;

// reading
some_int = *(int*)(sendBuffer + pos)

posのバイト単位のオフセットですsendBuffer

バッファとの間で文字列をコピーするにはstrcpy、文字列がヌルで終了している場合、またはmemcpyそうでない場合にのみ使用します。例えば

// writing
strcpy(sendBuffer + pos, some_string);

// reading
strcpy(some_string, sendBuffer + pos);

明らかに、文字列を格納するために利用可能なメモリがあることに注意する必要があります。

于 2013-09-20T08:36:57.300 に答える