簡體   English   中英

如何將整數轉換為uint8_t指針?

[英]How to convert an integer to a uint8_t pointer?

我有一個定義如下的函數:

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

但它不起作用(給我分段錯誤錯誤)。 不知道怎么辦呢?

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

形式“ ( type ) { initializers ... } ”是復合文字 ,在C 2018 6.5.2.5中規定。 它使用初始化程序給出的值創建指定類型的對象。

(uint8_t []) { 0x01 }創建一個值為0x01 uint8_t數組。 作為一個數組,它會自動轉換為指向其第一個元素的指針,該元素適用於foo的第一個參數。

函數內的復合文字是臨時的,自動存儲持續時間與其封閉塊相關聯。 函數外部的復合文字用於執行程序,具有靜態存儲持續時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM