将Char指针强制转换为UINT32

时间:2014-09-02 21:07:01

标签: c

我需要将一个字符串传递给一个函数并分配给UINT32。

void main ()
{
    do_this ("SELF", 18, 100);
}

void do_this(char* comm , UINT32 num , UINT32 value)
{
    UINT32 inl_values[13] ;

    inl_values[0] = (UINT32)comm ;
}

我尝试将字符串分配给inl_values。但是我收到一个错误:赋值在没有强制转换的情况下从指针生成整数。

我需要将此值捆绑到UINT32中,并将inl_values完整数组传递给另一个函数。有人可以告诉我怎么解决这个问题。

1 个答案:

答案 0 :(得分:0)

我猜你的代码正在调用一个具有32位操作码作为第一个参数的API,并且API的作者选择了一个操作码,如果他做了组合的十六进制/ ASCII转储你的数组他会看到ASCII字母" SELF"。有关此方法的示例,请参阅nginx配置代码:https://github.com/nginx/nginx/blob/master/src/core/ngx_conf_file.h

#define NGX_CORE_MODULE      0x45524F43  /* "CORE" */

字符串" CORE"是一个注释供参考,但代码从不使用实际的字符串。符号是无符号的32位整数,可以在需要int的任何地方使用。然而,int的4个字节(向后读 - 小端)是0x43(' C'),0x4F(' O'),0x52(' R')和0x45(' E)

我建议您遵循相同的方法 - 而不是创建ASCII字符串" SELF"并进行数学运算将其转换为整数,让编译器完成工作。

#define SELF_CODE  0x464C4553   /* "SELF" */ 

使用这个新常量,重写代码以避免使用任何字符串:

void main ()
{
    do_this (SELF_CODE, 18, 100);
}

void do_this(UINT32 comm , UINT32 num , UINT32 value)
{
    UINT32 inl_values[13] ;

    inl_values[0] = comm ;
}