如何将整数转换为uint8_t指针?

时间:2019-05-23 13:57:15

标签: c pointers formatting

我有一个定义如下的函数:

void foo(uint8_t *val, int num)
{
    for(int i=0;i<num;i++)
        printf("Buffer[%i]=0x%X \n",i,val[i]);
}

作为全局变量,我有一个声明为的数组:

uint8_t Buffer[4] = {0x01, 0x02, 0x03, 0x04};

因此,为了打印缓冲区,我执行以下操作:

int main()
{
    foo(Buffer,4);
    return 0;
}

哪个给出结果:

Buffer[0]=0x1                                                                                    
Buffer[1]=0x2                                                                                               
Buffer[2]=0x3                                                                                               
Buffer[3]=0x4 

问题是,在特定情况下,我只需要向该函数发送一个uint8_t参数即可替换缓冲区,因此我将其实现为:

int main()
{
    uint8_t READ_VAL[] = {0x01};
    foo(READ_VAL,1);
    return 0;
}

无论如何,有什么方法可以内联吗?我尝试这样做

foo((uint8_t *)0x01,1);

,但它不起作用(给我“分段错误”错误)。知道我该怎么办吗?

1 个答案:

答案 0 :(得分:2)

foo((uint8_t []) { 0x01 }, 1);

形式“ ( 类型 ) { 初始化器}”是复合文字 ,在C 2018 6.5.2.5中指定。它使用初始化程序给定的值创建指定类型的对象。

(uint8_t []) { 0x01 }创建一个包含值uint8_t的{​​{1}}的数组。作为数组,它会自动转换为指向其第一个元素的指针,该指针适合于0x01的第一个参数。

函数内部的复合文字是临时的,其封闭模块具有自动存储时间。函数外部的复合文字可以持久地执行程序,并且具有静态存储期限。