С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/30: Рейтинг темы: голосов - 30, средняя оценка - 4.90
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35

Перевод hex в char

27.01.2014, 16:21. Показов 6867. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Снова с вопросом, дорогие форумчане.
Есть задание - получаю строку, в которой хексовое число. Например "е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]) должна соединять два значения в одно. Но выводит какое-то левое огромное число! Помогите, пожалуйста! Буду очень благодарна.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2014, 16:21
Ответы с готовыми решениями:

Перевести строку char hex в hex массив
Мужики имею такую задачу есть переменная типа char котора содержит в себе строку hex. hexchar=&quot;2D33D8&quot; Есть вот такой массив...

convert char to hex
Здравствуйте. Подскажите пожалуйста как преобразовать строку в hex? То есть имеем функцию convert(char param) { return hex; }

Hex в unsigned char
Здравствуйте! У меня есть одна проблема, которую не могу решить, ну вот, у меня есть файл в нем hex строка, такого вида: 68 65 6c 6c 6f...

16
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
27.01.2014, 16:29
delete, прогнал
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
27.01.2014, 16:30  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
delete, прогнал
Потому что я ввела только два символа. А программу хочу сделать всё таки с рассчетом на большее количество символов, которое будет разбиваться по два.

Добавлено через 37 секунд
Цитата Сообщение от 0x10 Посмотреть сообщение
delete, прогнал
Бывает.
0
Заблокирован
27.01.2014, 16:33
C++
1
2
std::string sourceStrByte = "e8";               
unsigned char result = (unsigned char) strtol(sourceStrByte.c_str(), NULL, 16);
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
27.01.2014, 17:15  [ТС]
Цитата Сообщение от ляга Посмотреть сообщение
C++
1
2
std::string sourceStrByte = "e8";               
unsigned char result = (unsigned char) strtol(sourceStrByte.c_str(), NULL, 16);
Спасибо! Но нужно вручную.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
27.01.2014, 17:25
Тамика, char -> unsigned char.
Битовые операции над знаковыми числами лучше вообще не проводить, на всякий)
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
27.01.2014, 17:28  [ТС]
Учла.
А не подскажите ещё, пожалуйста, что за фигня со строками.
Есть у меня строка std::string str = "abc";
Почему я не могу создать строку std::string result = str[2*i] + str[2*i + 1]; ?.. Почему так нельзя?
В цикле, естественно.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
27.01.2014, 17:37
Цитата Сообщение от Тамика Посмотреть сообщение
Почему я не могу создать строку std::string result = str[2*i] + str[2*i + 1]; ?.. Почему так нельзя?
Потому что результат сложения двух символов - это число типа int, а у класса string нет ни подходящего оператора =, ни подходящего неявного конструктора преобразования.
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
27.01.2014, 17:41  [ТС]
Цитата Сообщение от gray_fox Посмотреть сообщение
Потому что результат сложения двух символов - это число типа int, а у класса string нет ни подходящего оператора =, ни подходящего неявного конструктора преобразования.
Понэл.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.01.2014, 17:42
Цитата Сообщение от Тамика Посмотреть сообщение
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]);
0
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
27.01.2014, 17:43  [ТС]
Цитата Сообщение от 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]);
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
27.01.2014, 17:47
Цитата Сообщение от Тамика Посмотреть сообщение
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]};
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
27.01.2014, 17:51  [ТС]
Цитата Сообщение от 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]};
Ха-ха, вот странно. Общий результат выдало правильный, но Вы правы - нафигачило мне тучу восьмерок.
0
What a waste!
 Аватар для gray_fox
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
27.01.2014, 17:53
Лучший ответ Сообщение было отмечено Тамика как решение

Решение

Цитата Сообщение от 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.
1
Котовчанин
942 / 482 / 200
Регистрация: 16.02.2010
Сообщений: 3,338
Записей в блоге: 35
27.01.2014, 17:54  [ТС]
Цитата Сообщение от gray_fox Посмотреть сообщение
Т.е. лучше так тогда:
C++
1
std::string bin(&str[2*i], &str[2*i] + 2);
Вот этот вариант выбрала и он как раз работает, как нужно! Ещё раз спасибо.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
27.01.2014, 17:58
Когда str - string, есть ещё
C++
1
std::string(str, 2*i, 2);
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
27.01.2014, 18:09
Не заметил сразу, что символы подряд идут. Тогда я бы сделал например так:
C++
1
std::string result = std::string( &str[2*i], 2 );
P.S. или как Somebody
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2014, 18:09
Помогаю со студенческими работами здесь

Конвертация ' string hex ' to char
добрый день не могу понять как преобразовать последовательность char в string hex и обратно string hex to char есть...

HEX in char[] to int or DWORD
Здравия всем! Я считал 4 байта из файла, и запихнул их в char: \xFE \x00 \x00 \x00 Это число в шестнадцатиричном виде,...

Как выводить char в hex?
Доброго времени суток! Как через cout выводить char в hex? Нужно для криптографической библиотеки. Заранее спасибо :)

Получить int hex число из char
Всем привет. Знаю, тема наверное заезженная, но не могу найти нужную информацию. Есть текстовый файл 16-ричными числами. Читаю этот файл в...

Запись в файл char строки в hex'e
Имеется файл, в нем несколько строк, в каждой строке заданное количество символов, и мне нужно считать каждую строку, перевести её в hex и...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru