[英]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.