我想使用sprintf将ID[10]
中的数据附加到dispvar
。但是问题是ID是uint64_t
类型的,dispvar
是char
类型。因此,当我尝试以下代码时,我只得到附加到dispvar
中的ID
中存储的第一个值。如何将ID
的整个内容附加到dispvar
?
char dispvar[150]={0};
union Device_Details{
struct DeviceDetails{
uint64_t FirmwareID[10];
uint64_t No_of_Mot;
uint64_t ID[10];
uint64_t RTC_Data[7];
uint64_t BatStat;
}Device;
uint64_t Buffer[11];
}DeviceData;
sprintf(dispvar,"n Device ID is %s", ( char *)ID);
ID是从我的应用程序中设置的,因此,如果我将ID设置为" Hello"中的ID,ID将看起来像-ID [0] ='H',ID [1] ='e',ID [2] ='l',id [3] ='l',id [4] ='0';它们每个都是未签名的长期索引。
图像
不需要转换,因为数据存储在uint64_t
数组中。
// first populate the dispvar with initial string
int idx = sprintf(dispvar, "n Device ID is ");
// we have the array
uint64_t ID[10] = { 'H', 'e', 'l', 'l', 'o', ' ' };
// for each element in ID
for (size_t i = 0; i < sizeof(ID)/sizeof(*ID); ++i) {
// assert(isprint(ID[i])); // extra assertion
// we put the ID[i] into our dispvar
dispvar[idx++] = ID[i];
// null terminte character is also copied. We need to break.
if (ID[i] == ' ') {
break;
}
}
// should work as expected
printf("%sn", dispvar);
无法使用sprintf
进行此操作。您还可以手动将数组复制到char缓冲区中,然后致电sprintf
。
ID值显然包含终止零的字符数据,至少这就是我在下面假设的。
char buffer[11];
for (int i = 0; i < 10; ++i)
buffer[i] = ID[i];
buffer[10] = ' ';
sprintf(dispvar,"n Device ID is %s", buffer);