Преобразование строки ASCII в десятичное и шестнадцатеричное представление - PullRequest
0 голосов
/ 03 августа 2010

Мне нужно преобразовать строку ASCII, например ... "hello2", в ее десятичное или шестнадцатеричное представление (числовая форма, конкретный вид не имеет значения) Итак, "привет" будет: 68 65 6c 6c 6f 32 в HEX. Как мне сделать это в C ++, не используя гигантский оператор if?

РЕДАКТИРОВАТЬ: Хорошо, вот решение, с которым я пошел:

int main()
{
    string c = "B";
    char *cs = new char[c.size() + 1];
    std::strcpy ( cs, c.c_str() );
    cout << cs << endl;

    char a = *cs;
    int as = a;
    cout << as << endl;
    return 0;
}

Ответы [ 5 ]

6 голосов
/ 03 августа 2010

Просто распечатайте его в шестнадцатеричном виде, что-то вроде:

for (int i=0; i<your_string.size(); i++)
    std::cout << std::hex << (unsigned int)your_string[i] << " ";

Скорее всего, вы захотите установить точность и ширину, чтобы всегда давать 2 цифры и тому подобное, но общая идея остается прежней.Лично, если бы я делал это, я бы, вероятно, использовал printf("%.2x");, так как он делает все правильно, значительно меньше хлопот.

3 голосов
/ 03 августа 2010

Строка - это просто массив char с, поэтому все, что вам нужно сделать, это цикл от 0 до strlen(str)-1 и использовать printf() или что-то подобное, чтобы отформатировать каждый символ как десятичный / шестнадцатеричный.

1 голос
/ 04 августа 2010
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>

int main() {
  std::string hello = "Hello, world!";

  std::cout << std::hex << std::setw(2) << std::setfill('0');
  std::copy(hello.begin(),
            hello.end  (),
            std::ostream_iterator<unsigned>(std::cout, " "));
  std::cout << std::endl;
}
1 голос
/ 03 августа 2010

Вы можете использовать printf (), чтобы записать результат в стандартный вывод, или вы можете использовать sprintf / snprintf, чтобы записать результат в строку. Ключ здесь - это% X в строке формата.

#include <cstdio>
#include <cstring>
int main(int argc, char **argv)
{
    char *string = "hello2";
    int i;

    for (i = 0; i < strlen(string); i++)
        printf("%X", string[i]);

    return 0;
}

Если вы имеете дело с C ++ std :: string, вы можете использовать метод c_str () строки, чтобы получить массив символов C.

0 голосов
/ 03 августа 2010
for(int i = 0; i < string.size(); i++) {
    std::cout << std::hex << (unsigned int)string[i];
}
...