0

私はバイナリデータの操作/保存の経験があまりないので、誰かが私のためにいくつかのことを明確にしていただければ幸いです.

16バイト保存する必要があるデバイスがあります。たとえば、おそらくヘッダー情報を含むバイトの配列を送信する必要があります。たとえば、次のようにします。

unsigned char sendBuffer[255];
sendBuffer[0] = headerInfo1;
sendBuffer[1] = headerInfo1;
sendBuffer[2] = headerInfo1;
sendBuffer[3] = headerInfo1;
sendBuffer[4] = data;
sendBuffer[5] = data;
sendBuffer[6] = data;
sendBuffer[7] = data;
sendBuffer[8] = data;
...
sendBuffer[20] = data;

送信操作は簡単だとしましょう。使用するだけSend(sendBuffer, length)です。

私の質問は、デバイスに整数を保存したいということです-これを行う最良の方法は何ですか?

私はそれを行うサンプルコードを持っていますが、それが大丈夫かどうか、どのようにそれを行っているかわかりませんでした。私も混乱しました。私は基本的にテキストボックスに保存したい数字を入力します。10510進数で保存したいとします。入力すると"00000000000000000000000000000105"(プログラムがこれを10進数または16進数としてどのように解釈するかまだわかりません)、次のコードがあります:

for(int i=0,m=0; i < size; i+=2,m++)
{
char ch1, ch2;
ch1=(char)str[i]; // str contains the number I entered above as string, padded
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;

// Contains data to write as a byte array; this is basically the 'data' part as mentioned in my above snippet
array1[m] = (char)(dig1*16 + dig2);
}

そして、これarray1[m]は上記のように使用してデバイスに書き込まれSendます。しかし、デバッグ時にarray1含まれるもの:0000000000000015

読み取りを行うと、得られる値は正しいです00000000000000000000000000000105。なぜこれが機能するのですか?

4

2 に答える 2

0

ここでいくつかの車輪を再発明していますが、C++ を初めて使用する場合は当然のことです。

std::cin >> yourInteger整数を読み取ります。自分で変換する必要はありません。

通常、先行ゼロは書き出されませんが、C++ 整数型では常に存在します。たとえばint32_t、常に 32 ビットです。105 (0x69) を格納すると、実際には 0x00000069 が格納されます。

したがって、おそらく最善の方法は、memcpyその整数をsendBuffer. sizeof(yourInteger)バイトをコピーする必要があります。

于 2013-09-19T07:22:58.980 に答える