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

3

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

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);

但是它没有起作用(给了我段错误)。有什么方法可以做到这一点吗?


3
你似乎在寻找的是所谓的【复合字面量】(compound literals),可参考链接 https://en.cppreference.com/w/c/language/compound_literal。 - Some programmer dude
1
如果你只有一个值,为什么不直接用printf替换函数调用呢? - Lundin
我只是将我的问题简化为这个简单的printf案例来重现我的问题,但实际上这并不是一个选项。@Lundin - EUS
确实,那正是我所需要的。谢谢!@某程序员 - EUS
1个回答

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

该表单“( 类型 ) { 初始化器}”是一种复合字面量,在C 2018 6.5.2.5中指定。它创建一个具有指定类型和由初始化器给出的值的对象。 (uint8_t []) { 0x01 }创建一个包含一个值为0x01uint8_t数组。作为一个数组,它会自动转换为其第一个元素的指针,这适用于foo的第一个参数。
函数内的复合字面量是临时的,与其封闭块相关联的自动存储期。函数外的复合字面量在程序执行期间持续存在,具有静态存储期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接