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

Перевод hex в char

27.01.2014, 16:21. Показов 6766. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru