我想使用sprintf将ID[10]
中的数据附加到dispvar
中。但是问题在于ID是uint64_t
类型,而dispvar
是char
类型。因此,当我尝试下面的代码时,我只获得存储在ID
后面的dispvar
中的第一个值。如何将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 [0] ='H',ID [1] ='e',ID [2] =' l',ID [3] ='l',ID [4] ='0';每个都是无符号long long类型的索引。
答案 0 :(得分:1)
ID值显然包含以零结尾的字符数据,至少这就是我在下面假设的情况。
char buffer[11];
for (int i = 0; i < 10; ++i)
buffer[i] = ID[i];
buffer[10] = '\0';
sprintf(dispvar,"\n Device ID is %s", buffer);
答案 1 :(得分:1)
几乎没有必要进行转换,因为数据存储在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', '\0' };
// 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] == '\0') {
break;
}
}
// should work as expected
printf("%s\n", dispvar);
无法使用sprintf
执行此操作。您还可以手动将数组复制到char缓冲区中,然后调用sprintf
。