Форум программистов, компьютерный форум CyberForum.ru

Перевод hex в char - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,542
Записей в блоге: 27
27.01.2014, 16:21     Перевод hex в char #1
Добрый день! Снова с вопросом, дорогие форумчане.
Есть задание - получаю строку, в которой хексовое число. Например "е8". Нужно из нее сделать один байт хексовый е8.
Вот моя программа.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <vector>
 
char string_to_hex(const char& hex)
{
    char c = hex;
    if(( hex >= '0')&&(hex <= '9')){
        c = hex - '0';
        return c;}
    if(( hex >= 'A')&&(hex <= 'F')){
        c = hex - 'A' + 10;
        return c;}
    if(( hex >= 'a')&&(hex <= 'f')){
        c = hex - 'a' + 10;
        return c;}
}
 
std::vector <char> converter (const std::string& str)
{
    std::vector <char> result;
    result.reserve(str.size() / 2);
    for (int i = 0; i < str.size()/2; ++i)
        result.push_back(((string_to_hex(str[2*i])) << 4) | string_to_hex(str[2*i + 1]));
 
    return result;
}
 
int main()
{
    std::string str = "e8";
    std::vector<char> result = converter(str);
    for (int i = 0; i < result.size(); ++i)
        std::cout << static_cast<unsigned int>(result[i])<< std::endl;
 
    system("pause");
}
Функция string_to_hex возвращает всё верно. Но вот с пушем в вектор проблема... Я пока не сильно в этом разбираюсь, но по идее строка ((string_to_hex(str[2*i])) << 4) | string_to_hex(str[2*i + 1]) должна соединять два значения в одно. Но выводит какое-то левое огромное число! Помогите, пожалуйста! Буду очень благодарна.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2014, 16:21     Перевод hex в char
Посмотрите здесь:

Перевод данных в hex. C++
C++ Как сделать, чтобы в char было hex число
C++ Число int перевести в hex и хранить в char
C++ convert char to hex
C++ Hex коды символов из char* в стринг
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
27.01.2014, 16:29     Перевод hex в char #2
delete, прогнал
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,542
Записей в блоге: 27
27.01.2014, 16:30  [ТС]     Перевод hex в char #3
Цитата Сообщение от 0x10 Посмотреть сообщение
delete, прогнал
Потому что я ввела только два символа. А программу хочу сделать всё таки с рассчетом на большее количество символов, которое будет разбиваться по два.

Добавлено через 37 секунд
Цитата Сообщение от 0x10 Посмотреть сообщение
delete, прогнал
Бывает.
ляга
Заблокирован
27.01.2014, 16:33     Перевод hex в char #4
C++
1
2
std::string sourceStrByte = "e8";               
unsigned char result = (unsigned char) strtol(sourceStrByte.c_str(), NULL, 16);
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,542
Записей в блоге: 27
27.01.2014, 17:15  [ТС]     Перевод hex в char #5
Цитата Сообщение от ляга Посмотреть сообщение
C++
1
2
std::string sourceStrByte = "e8";               
unsigned char result = (unsigned char) strtol(sourceStrByte.c_str(), NULL, 16);
Спасибо! Но нужно вручную.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.01.2014, 17:25     Перевод hex в char #6
Тамика, char -> unsigned char.
Битовые операции над знаковыми числами лучше вообще не проводить, на всякий)
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,542
Записей в блоге: 27
27.01.2014, 17:28  [ТС]     Перевод hex в char #7
Учла.
А не подскажите ещё, пожалуйста, что за фигня со строками.
Есть у меня строка std::string str = "abc";
Почему я не могу создать строку std::string result = str[2*i] + str[2*i + 1]; ?.. Почему так нельзя?
В цикле, естественно.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.01.2014, 17:37     Перевод hex в char #8
Цитата Сообщение от Тамика Посмотреть сообщение
Почему я не могу создать строку std::string result = str[2*i] + str[2*i + 1]; ?.. Почему так нельзя?
Потому что результат сложения двух символов - это число типа int, а у класса string нет ни подходящего оператора =, ни подходящего неявного конструктора преобразования.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,542
Записей в блоге: 27
27.01.2014, 17:41  [ТС]     Перевод hex в char #9
Цитата Сообщение от gray_fox Посмотреть сообщение
Потому что результат сложения двух символов - это число типа int, а у класса string нет ни подходящего оператора =, ни подходящего неявного конструктора преобразования.
Понэл.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.01.2014, 17:42     Перевод hex в char #10
Цитата Сообщение от Тамика Посмотреть сообщение
std::string result = str[2*i] + str[2*i + 1];
Попробуйте так:
C++
1
std::string result = std::string(1, str[2*i]) + std::string(1, str[2*i + 1]);
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,542
Записей в блоге: 27
27.01.2014, 17:43  [ТС]     Перевод hex в char #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Попробуйте так:
C++
1
std::string result = std::string(1, str[2*i]) + std::string(1, str[2*i + 1]);
Я почти так и сделала, только проще.
std::string bin = std::string (str[2*i], str[2*i + 1]);
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.01.2014, 17:47     Перевод hex в char #12
Цитата Сообщение от Тамика Посмотреть сообщение
std::string bin = std::string (str[2*i], str[2*i + 1]);
И как, работает?) Первый символ будет интепретироваться как количество второго символа
Можно ещё так
C++
1
std::string bin = std::string(&str[2*i], &str[2*i] + 2);
или так, если есть списки инициализации
C++
1
std::string bin = {str[2*i], str[2*i + 1]};
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,542
Записей в блоге: 27
27.01.2014, 17:51  [ТС]     Перевод hex в char #13
Цитата Сообщение от gray_fox Посмотреть сообщение
И как, работает?) Первый символ будет интепретироваться как количество второго символа
Можно ещё так
C++
1
std::string bin = std::string(&str[2*i], &str[2*i] + 2);
или так, если есть списки инициализации
C++
1
std::string bin = {str[2*i], str[2*i + 1]};
Ха-ха, вот странно. Общий результат выдало правильный, но Вы правы - нафигачило мне тучу восьмерок.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.01.2014, 17:53     Перевод hex в char #14
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от gray_fox Посмотреть сообщение
C++
1
std::string bin = std::string(&str[2*i], &str[2*i] + 2);
Т.е. лучше так тогда:
C++
1
std::string bin(&str[2*i], &str[2*i] + 2);
Добавлено через 2 минуты
Цитата Сообщение от Тамика Посмотреть сообщение
Ха-ха, вот странно. Общий результат выдало правильный, но Вы правы - нафигачило мне тучу восьмерок.
См. тут (2) char неявно приводится к std::string::size_type.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,542
Записей в блоге: 27
27.01.2014, 17:54  [ТС]     Перевод hex в char #15
Цитата Сообщение от gray_fox Посмотреть сообщение
Т.е. лучше так тогда:
C++
1
std::string bin(&str[2*i], &str[2*i] + 2);
Вот этот вариант выбрала и он как раз работает, как нужно! Ещё раз спасибо.
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
27.01.2014, 17:58     Перевод hex в char #16
Когда str - string, есть ещё
C++
1
std::string(str, 2*i, 2);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2014, 18:09     Перевод hex в char
Еще ссылки по теме:

C++ Перевести char* или byte* в Hex-строку
Конвертация ' string hex ' to char C++
C++ Как выводить char в hex?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
27.01.2014, 18:09     Перевод hex в char #17
Не заметил сразу, что символы подряд идут. Тогда я бы сделал например так:
C++
1
std::string result = std::string( &str[2*i], 2 );
P.S. или как Somebody
Yandex
Объявления
27.01.2014, 18:09     Перевод hex в char
Ответ Создать тему
Опции темы

Текущее время: 23:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru