memcpy () для копирования целочисленного значения в буфер символов - PullRequest
0 голосов
/ 17 ноября 2010

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

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

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

...........

Когда я печатаю str1, он пуст. Пожалуйста, уточните.

Ответы [ 4 ]

7 голосов
/ 17 ноября 2010

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

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

2 голосов
/ 17 ноября 2010

try

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

.

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

1 голос
/ 17 ноября 2010

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

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

0 голосов
/ 17 ноября 2010

Может быть, вам нужно конвертировать intger в char *, чтобы вы могли использовать функцию itoa текст ссылки

...