2

私はこの配列を持っています:BYTE set[6] = { 0xA8,0x12,0x84,0x03,0x00,0x00, } そして私はこれを挿入する必要がありvalue : "" int Value = 1200; ""ます....最後の4バイトに。実際には、int から 16 進数に変換してから、配列内に書き込む...これは可能ですか?

私はすでにBitConverter::GetBytes機能を持っていますが、それだけでは十分ではありません。

ありがとうございました、

4

2 に答える 2

0

これのことですか?

#include <stdio.h>
#include <stdlib.h>

#define BYTE unsigned char

int main ( void )
{
 BYTE set[6] = { 0xA8,0x12,0x84,0x03,0x00,0x00, } ;

 sprintf ( &set[2] , "%d" , 1200 ) ;

 printf ( "\n%c%c%c%c", set[2],set[3],set[4],set[5] ) ;

 return 0 ;
}

出力:

1200

于 2013-07-11T18:37:42.510 に答える
0

元の質問に答えるには:確かにできます。sizeof(int) == 4あなたとすぐにsizeof(BYTE) == 1

しかし、「intを16進数に変換する」とはどういう意味かわかりません。16 進文字列表現が必要な場合は、それを行う標準的な方法の 1 つを使用する方がはるかに優れています。たとえば、最後の行では std::hex を使用して数値を 16 進数として出力します。

これは、あなたが求めていたものともう少しの解決策です (実際の例: http://codepad.org/rsmzngUL ):

#include <iostream>

using namespace std;

int main() {
    const int value = 1200;
    unsigned char set[] = { 0xA8,0x12,0x84,0x03,0x00,0x00 };

    for (const unsigned char* c = set; c != set + sizeof(set); ++c)    {
        cout << static_cast<int>(*c) << endl;
    }

    cout << endl << "Putting value into array:" << endl;
    *reinterpret_cast<int*>(&set[2]) = value;

    for (const unsigned char* c = set; c != set + sizeof(set); ++c)    {
        cout << static_cast<int>(*c) << endl;
    }

    cout << endl << "Printing int's bytes one by one: " << endl;
    for (int byteNumber = 0; byteNumber != sizeof(int); ++byteNumber) {
        const unsigned char oneByte = reinterpret_cast<const unsigned char*>(&value)[byteNumber];
        cout << static_cast<int>(oneByte) << endl;
    }

    cout << endl << "Printing value as hex: " << hex << value << std::endl;
}

UPD: コメントから質問へ: 1. 数値から個別の数字を個別のバイトで取得する必要がある場合は、別の話です。2.リトルエンディアン対ビッグエンディアンも同様に重要です。回答ではそれを説明しませんでした。

于 2013-07-11T15:54:24.293 に答える