[英]Passing uint8_t array argument to the subroutine that excepts uint32_t (conversion from uint8_t array to uint32_t array)
我有一個 C 子程序,如下所示,
int sub_data (uint32_t size, uint32_t arrayB[])
{
int i;
for(i=0; i<size; i++)
printf("arrayB[%0d] = %2x\n", i , arrayB[i]);
}
我想將下面的 arrayA 傳遞給上面提到的子程序,
uint8_t arrayA = {0x12, 0x34, 0x56, 0x78, 0x9a};
int main()
{
sub_data(5, arrayA);
return 0;
}
問題是 arrayA 的類型是 uint8_t 和 sub_data 除了參數為 uint32_t 我的要求是 sub_data 應該從 arrayA 中獲取單個單詞並存儲在 arrayB 中作為單個單詞
所以最終打印應該是,
arrayB[0] = 12
arrayB[1] = 34
arrayB[2] = 56
arrayB[3] = 78
arrayB[4] = 9a.
我正在努力進行轉換。 我遇到的所有解決方案是將 arrayA 的四個字存儲到 arrayB 的單個字中。 但我想要 arrayA 的單個單詞作為 arrayB 的單個單詞。
我如何做到這一點?
您可以使用memcpy
用每個uint8_t
數組元素填充uint32_t
數組,並將其傳遞給函數:
uint8_t arrayA[5] = {0x12, 0x34, 0x56, 0x78, 0x9a};
uint32_t arrayB[5] = {0, 0, 0, 0, 0};
for (int i=0; i<5; i++)
memcpy(&arrayB[i], &arrayA[i], sizeof(arrayA[i]));
sub_data(5, arrayB);
您可以使用通用宏並有多個函數來處理參數。
例子:
int sub_data_32 (uint32_t size, uint32_t *arrayB)
{
int i;
for(i=0; i<size; i++)
printf("arrayB[%0d] = %2x\n", i , arrayB[i]);
}
int sub_data_16 (uint32_t size, uint16_t *arrayB)
{
int i;
for(i=0; i<size; i++)
printf("arrayB[%0d] = %2x\n", i , arrayB[i]);
}
int sub_data_8 (uint32_t size, uint8_t *arrayB)
{
int i;
for(i=0; i<size; i++)
printf("arrayB[%0d] = %2x\n", i , arrayB[i]);
}
#define sub_data(a,b) _Generic((b), \
uint8_t *: sub_data_8, \
uint16_t *: sub_data_16, \
uint32_t *: sub_data_32) (a,b)
uint8_t arrayA[] = {0x12, 0x34, 0x56, 0x78, 0x9a};
uint16_t arrayB[] = {0x13, 0x35, 0x57, 0x79, 0x9b};
uint32_t arrayC[] = {0x14, 0x36, 0x58, 0x7A, 0x9c};
int main()
{
sub_data(5, arrayA);
printf("-----------\n");
sub_data(5, arrayB);
printf("-----------\n");
sub_data(5, arrayC);
return 0;
}
int sub_data (uint32_t size, uint32_t arrayB[])
{
int i;
for(i=0; i<size; i++)
printf("arrayB[%0d] = %2x\n", i , arrayB[i]);
}
uint8_t arrayA = {0x12, 0x34, 0x56, 0x78, 0x9a};
int main()
{
uint32_t temp[5] = {0};
int i;
for(i=0; i<5; i++)
temp[i]=arrayA[i];
sub_data(5, temp);
return 0;
}
在這里,我像這樣從 uint8_t arrayA 中將數據一一分配給 uint32_t temp,
uint32_t temp[5] = {0};
int i;
for(i=0; i<5; i++)
temp[i]=arrayA[i];
這工作得很好。 謝謝@rici 的評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.