如何将8字节的十六进制枚举值添加到unsigned char指针?

时间:2014-10-22 16:23:02

标签: c pointers hex unsigned-char

我有 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]=?;

非常感谢你!

1 个答案:

答案 0 :(得分:1)

你必须更明确地指出你的意思"将OPTION_1添加到以下指针"。添加指针可能意味着:

  1. 递增指针的地址

    MyArray + = OPTION_1; //这会通过OPTION_1

  2. 移动指针的地址
  3. 增加指针指向的内存地址中的值(即取消引用指针和增量)

    * MyArray + = OPTION_1; //这会尝试将OPTION_1添加到地址

  4. 的值

    如果您正在引用第二个,那么您会遇到一些麻烦,因为您的指针以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个字节的位置。