Вопрос по c++ – Как напечатать unsigned char [] как HEX в C ++?

11

Я хотел бы напечатать следующие хешированные данные. Как я должен это делать?

unsigned char hashedChars[32];
SHA256((const unsigned char*)data.c_str(),
       data.length(), 
       hashedChars);
printf("hashedChars: %X\n", hashedChars);  // doesn't seem to work??

Ваш Ответ

1   ответ
15

чение, но вместо этого вы предоставляете массивchar, Что вам нужно сделать, это распечататьchar значения индивидуально в виде шестнадцатеричных значений.

printf("hashedChars: ");
for (int i = 0; i < 32; i++) {
  printf("%x", hashedChars[i];
}
printf("\n");

Поскольку вы используете C ++, хотя вы должны рассмотреть возможность использованияcout вместоprintf (это более идиоматично для C ++.

cout << "hashedChars: ";
for (int i = 0; i < 32; i++) {
  cout << hex << hashedChars[i];
}
cout << endl;
@vidit пользователь задал вопросы с точки зренияprintf поэтому я решил ответить таким образом. У них явно есть путаница относительно того, какprintf работает, и я хотел бы прояснить это
printf действительно C ++ тоже! Есть моменты, когда я использую его вместо потоков. Это имеет свое место.
@JaredPar Так что ..printf на самом деле работал для меня, ноcout не работал для меня. я используюxCode и & quot; hashedChars: & quot; получил печать, но не все остальное. louis.luo
Вы хотите убедиться, что по 2 цифры выводятся для каждойcharв противном случае в выводе будут отсутствовать некоторые нули. Для printf измените формат на%02X, не уверен, как это сделать для cout.
FWIW, пришлось бросить наunsigned intт.е.hex << (unsigned int)hashedChars[i] заставить его работать на меня.

Похожие вопросы