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

标签 c pointers hex unsigned-char

我有这个 8 字节的十六进制枚举:

enum MyEnum
{
    OPTION_1        = 0x000000;
    OPTION_2        = 0x000001;
};

有没有办法将OPTION_1添加到以下指针(该指针将包含其他二进制数据):

unsigned char* MyArray; // bytes array

编辑 我对“添加”的表达不清楚表示歉意。好吧,如果我有的话

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

非常感谢!

最佳答案

您必须更具体地说明“将 OPTION_1 添加到以下指针”的含义。添加到指针可能意味着:

  1. 增加指针的地址

    MyArray += OPTION_1;//这会将指针的地址移动 OPTION_1

  2. 递增指针所指向的内存地址中的值(即取消引用指针并递增)

    *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 个字节可供操作。

关于c - 如何将 8 字节十六进制枚举值添加到 unsigned char 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26512286/

相关文章:

c - C标准是否指定递增指针时进位传播的距离?

c - 使用 C 程序将输入数据的十六进制转换为整数

c - Linux C 程序 - HEX 如何以 0x 为前缀

c - 如何使用 fork() 打开新的终端窗口?

c 如何检查数组的第一个字符

c++ - ptree 迭代器成员未被自动完成识别?

c - 从不兼容的指针类型传递 arg 1 of `foo'

c - 如何用十六进制表示负 char 值?

c - gtk_file_chooser_get_filename,结果未释放,内存泄漏?

c - 修改函数中结构成员指向的值