Есть ли способ преобразовать шестнадцатеричный дамп, например. aec4d2f3c6a4e70ea6cea074f65812d2a34b180cc92b817edcd867167e7a91c5beb942f0 в строку в c, чтобы каждые две шестнадцатеричные цифры составляли char? Если да, то?
Преобразование Hexdump в строку в c
comment
Только что расшифровал строку char *str = Кто-то сделает мою домашнюю работу еще на несколько повторений :-);
- person Breaking not so bad   schedule 15.01.2011
comment
Вы можете преобразовать шестнадцатеричный дамп в массив байтов. Вы не обязательно можете преобразовать его в строку. Что делать, если у вас есть байт 0x00? Или байты, которые недопустимы в вашей кодировке символов?
- person dan04   schedule 15.01.2011
Ответы (3)
Читает со стандартного ввода и выводит на стандартный вывод:
int main()
{
int ch;
while(scanf("%2x", &ch) == 1)
putchar(ch);
}
Я думаю, вы можете легко изменить его самостоятельно для ваших конкретных требований к источнику и месту назначения.
person
Yakov Galka
schedule
15.01.2011
Один из способов:
size_t unBytes = strHex.size() / 2;
std::string strResult(unBytes, 0);
for (size_t i = 0; i < unBytes; ++i)
{
std::istringstream in(strHex.substr(2*i, 2));
int byte = 0;
in >> std::hex >> byte;
strResult[i] = byte;
}
person
ssmir
schedule
15.01.2011
Вы меня поняли - я не могу понять, шутка ли это.
- person j_random_hacker; 15.01.2011
@j_random_hacker: Это C++ =) конечно, его можно сделать намного короче и быстрее. Я просто скопировал это из одной из моих программ
- person ssmir; 15.01.2011
@Наваз Спасибо. Первоначально unStart и unEnd имели некоторые смещения
- person ssmir; 15.01.2011
@ssmir: хорошо. Я понимаю, что
istringstream
требует вызова substr()
(в идеальном мире у него был бы конструктор, принимающий пару итераторов, что позволило бы избежать этого, но это не ваша вина), но, пожалуйста, по крайней мере, предварительно выделите достаточно места в strResult
и используйте strResult[i] = byte;
напрямую, а не чем расточительно идти через encoded
. Вам вообще не нужен encoded
.
- person j_random_hacker; 15.01.2011
@j_random_hacker Спасибо. Изначально мне нужен был этот вектор, а сейчас - нет.
- person ssmir; 15.01.2011
@ssmir: Это выглядит намного здоровее :)
- person j_random_hacker; 15.01.2011
Несколько раз используйте scanf с %hhx
. См. man scanf
.
person
ypnos
schedule
15.01.2011