如何使用sprintf将UINT_64的数组添加到一个字符数组中



我想使用sprintf将ID[10]中的数据附加到dispvar。但是问题是ID是uint64_t类型的,dispvarchar类型。因此,当我尝试以下代码时,我只得到附加到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);

最新更新