Как использовать sprintf для добавления массива типа uint_64 в массив char? - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу добавить данные в ID[10] в dispvar, используя sprintf.Но проблема в том, что идентификатор имеет тип 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);

Идентификатор установлен из моего приложения, поэтому, если я установлю идентификатор как Hello из своего приложения, идентификатор будет выглядеть так: - ID [0] = 'H', ID [1] = 'e',ID [2] = 'l', ID [3] = 'l', ID [4] = '0';каждый из них является индексом типа unsigned long long.

IMAGE

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Существует небольшая потребность в преобразовании, потому что данные хранятся в массиве 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.Вы также можете скопировать массив в буфер символов вручную и затем вызвать sprintf.

0 голосов
/ 27 февраля 2019

Значения идентификатора, очевидно, содержат символьные данные с завершающим нулем, по крайней мере, это то, что я предполагаю ниже.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...