我有 8个字节的十六进制枚举:
enum MyEnum
{
OPTION_1 = 0x000000;
OPTION_2 = 0x000001;
};
有没有办法将OPTION_1
添加到以下指针(此指针将包含其他二进制数据):
unsigned char* MyArray; // bytes array
修改 我为#34;添加"表达不清楚而道歉。好吧,如果我有
enum MyEnum
{
OPTION_1 = 0x00;
OPTION_2 = 0x01;
};
然后这个枚举的值大小为1个字节。所以在指针的内存分配之后,我可以简单地分配如下:
MyArray[0]=OPTION_1;
但现在问题是OPTION_1的大小为8字节,而不是1字节。所以我不能做那么简单的任务。
我应该有作业,但我不知道价值观:
MyArray[0]=?; // copy the first byte of OPTION_1
MyArray[1]=?; // copy the second byte of OPTION_1
MyArray[2]=?; // ...
MyArray[3]=?; // ...
MyArray[4]=?;
MyArray[5]=?;
MyArray[6]=?;
MyArray[7]=?;
非常感谢你!
答案 0 :(得分:1)
你必须更明确地指出你的意思"将OPTION_1添加到以下指针"。添加指针可能意味着:
递增指针的地址
MyArray + = OPTION_1; //这会通过OPTION_1
增加指针指向的内存地址中的值(即取消引用指针和增量)
* MyArray + = OPTION_1; //这会尝试将OPTION_1添加到地址
如果您正在引用第二个,那么您会遇到一些麻烦,因为您的指针以8位(无符号字符)的增量引用内存,并且您的OPTION_1被定义为32位整数(虽然只使用了前24个)。
如果您想将OPTION_1
的单个字节添加到MyArray
指向的地址的前3个字节,您可以这样做:
*MyArray = (unsigned char)((OPTION_1 >> 16) & 0xFF);
*(MyArray+1) = (unsigned char)(OPTION_1 >> 8) & 0xFF;
*(MyArray+2) = (unsigned char)(OPTION_1 & 0xFF);
当然,您必须小心确保MyArray指向一个至少可以操作3个字节的位置。