memcpy () для копирования целочисленного значения для буфера Char

StackOverflow https://stackoverflow.com/questions/4202528

  •  25-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь скопировать значение памяти int в буфер Char. Код выглядит как ниже,

#define CPYINT(a, b) memcpy(a, &b, 4)
............

char str1[4];
int i = 1;
CPYINT(str1, i);
printf("%s",s);

...........

Когда я печатаю STR1, это пусто. Просьба уточнить.

Это было полезно?

Решение

Вы копируете представление байта целого числа в массив CHAR. Вы тогда спросите printf Чтобы интерпретировать этот массив в качестве нулевой заканчивающейся строки: str1[0] Быть ноль, вы по существу печатаете пустую строку (я пропускаю Эндианс Поговорите здесь).

Что ты ожидал ? Очевидно, что если вы хотите распечатать текстовое представление целого числа i, вы должны использовать printf("%d", i).

Другие советы

пытаться

printf("%02X %02X %02X %02X\n", str1[0], str1[1], str1[2], str1[3]);

вместо.

Двоичное представление целочисленного числа 1, вероятно, содержит ведущие нульс, и поэтому ваше текущее оператор Printf заканчивается раньше, чем вы хотите.

Каково ваше намерение здесь? Прямо сейчас вы вкладываете произвольные байтовые значения в массив CHAR, но затем интерпретируете их как строку, так как это происходит, первый байт, вероятно, ноль (нулевой) и, следовательно, ваш напечатает, но во всей вероятности будет много символов Непредебели, поэтому printf - неправильный инструмент для проверки, работала ли копия.

Итак, либо: цикл через массив и распечатать числовое значение каждого байта,% 0xd может быть полезным для этого или, если ваше намерение на самом деле для создания строкового представления INT, то вам понадобится более крупный буфер и место для Нулевой терминатор.

Может быть, вам нужно преобразовать strag, чтобы сделать * таким образом, то можно использовать функцию ITOAСсылка текста

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top