将int值写入字节数组

时间:2013-07-11 15:31:52

标签: c++ arrays bytearray

我有这个数组:BYTE set[6] = { 0xA8,0x12,0x84,0x03,0x00,0x00, }我需要在最后4个字节上插入这个value : "" int Value = 1200; "" ....实际上从int转换为十六进制然后写入数组内... 这可能吗?

我已经拥有BitConverter::GetBytes功能,但这还不够。

谢谢,

2 个答案:

答案 0 :(得分:0)

回答原始问题:确定你可以。 只要您sizeof(int) == 4sizeof(BYTE) == 1

但我不确定你的意思是“将int转换为十六进制”。如果你想要一个十六进制字符串表示,那么只使用一种标准方法就可以了。 例如,在最后一行,我使用std :: hex将数字打印为十六进制。

以下是您一直要求的解决方案以及更多内容(实例: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. Little vs Big endian也很重要,我在答案中没有说明这一点。

答案 1 :(得分: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