Как сделать hex8 кодирование в c? - PullRequest
0 голосов
/ 29 мая 2010

Я пытаюсь закодировать строку в hex8, используя c. Сценарий, который у меня сейчас есть:

int hex8 (char str) {
 str = printf("%x", str);
 if(strlen(str) == 1) {
  return printf("%s", "0", str);
 } else {
  return str;
 }
}

В этой функции мне нужно будет добавить 0 перед строкой, если длина меньше 1. Я не знаю, почему я получаю:

передача аргумента 1 из 'strlen' делает указатель из целого числа без приведения

Кто-нибудь знает почему?

Ответы [ 3 ]

2 голосов
/ 29 мая 2010

Вторая строка - проблема:

str = printf("%x", str);

printf выводит текст в stdout и возвращает целое число, представляющее количество выводимых символов, а не фактическое значение, которое было напечатано. Вам следует заменить эту строку на вызов sprintf, чтобы загрузить вывод в str:

sprintf(str, "%x", str);

Вы можете прочитать о различных стандартных функциях вывода здесь: Форматированные функции вывода

Обратите внимание, что sprintf возвращает количество символов, которые были сохранены в str, так что вы можете использовать это для проверки необходимости добавления 0 вместо использования strlen вообще, например :

if (sprintf(str, "%x", str) == 1)
{
...
2 голосов
/ 29 мая 2010

Я не знаю точно, что такое кодировка hex8, но похоже, что вы пытаетесь превратить char в двухбайтовую шестнадцатеричную строку? В этом случае вам не нужно ничего сложного, как у вас там. Просто сделайте что-то вроде этого:

char hexstring[3];
char character = 'f';

sprintf(hexstring, "%02x", character);

После этого фрагмента кода hexstring будет "66". Если у вас есть целая строка, что-то вроде этого должно работать (при условии, что вы выделили соответствующую память перед вызовом функции):

void string2hex(char *hex, char *in)
{
    while (*in)
    {
       hex += sprintf(hex, "%02x", *in);
       in++;
    }
}
1 голос
/ 29 мая 2010

Параметр str является символом. strlen ожидает аргумент char const *. Из контекста может показаться, что вам нужно изменить прототип на char * str.

РЕДАКТИРОВАТЬ: Вам также нужно изменить тип возвращаемого значения функции на char *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...