Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611

Как получить HEX строку из byte?

28.12.2015, 00:18. Показов 6348. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что - то вообще не работает...

C++
1
2
3
4
5
6
7
8
9
10
void ByteToHex(char Hex[], byte Sourse[])
{
    char const hex_chars[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 
    for(int j = 0, i = 0; i < 20; ++i)
    {
        Hex[j++] += hex_chars[(Sourse[i] & 0xF0) >> 4];
        Hex[j++] += hex_chars[(Sourse[i] & 0x0F) >> 0];
    }
}
Где - то видел без всяких букв, вроде

C++
1
for(int i = 0; i < 20; ++i) cout << (Sourse[] << 16) << (Sourse[] << 8);
И кто может объяснить, чем отличается byte от char?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.12.2015, 00:18
Ответы с готовыми решениями:

Перевести char* или byte* в Hex-строку
Собственно сабж. А ситуация такая: Есть функция принимающая толи char* толи BYTE* и мне нужно перевести этот массив в HEX-строку, при чом...

Byte to Hex
Подскажите пожалуйста, провожу данные BYTE через функцию, которая конвентирует в HEX, не всегда но через N.. количество раз, приложение...

Преобразование из HEX в BYTE
Теперь у меня есть массив (строка) с хекскодами и я хочу ее преобразовать в BYTE, нашел вот такую функцию int hex( char c ) { ...

38
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 01:25  [ТС]
Студворк — интернет-сервис помощи студентам
Ааа...Блин, проглядел, взял код с джавы

Добавлено через 2 минуты
А TCHAR это не char ?
0
393 / 165 / 32
Регистрация: 10.12.2015
Сообщений: 717
28.12.2015, 01:31
псевдоним, который всегда может поменяться.
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 01:49  [ТС]
Обратно только что - то не очень, одни ошибки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Hex2Byte(char lpBuff[], byte bValue[])
{
    char const hex_chars[] = "0123456789abcdef";
 
    int size = strlen((char *)bValue);
    byte b = malloc(size);
    int i = -1;
 
    while(++i < 16) b[hex_chars[i]] = i;
 
    i = 0;
    
    while (i in lpBuff) bValue[i] = 16 * b[lpBuff[i]] + b[lpBuff[i += 1]];
}
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
function tohexarray(str)
{
    var s = '0123456789ABCDEF'
    var ht = {}
 
    for (var i = 0; i < 16; i++) ht[s[i]] = i
 
    var a = str.split(' ') // Пробелами не буду баловаться, так, что дальше а = str
 
    for (var i in a) a[i] = 16 * ht[a[i][0]] + ht[a[i][1]]
 
    return a
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.12.2015, 06:30
C++
1
2
3
4
5
6
7
8
9
10
11
void Hex2Byte(char lpBuff[], byte bValue[])
{
    unsigned n;
    std::string s = lpBuff;
    for (size_t i = 0, j = 0; i < s.length(); i += 2, ++j)
    {
        std::istringstream iss(s.substr(i, 2));
        iss >> std::hex >> n;
        bValue[j] = n;
    }
}
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 15:00  [ТС]
Дак я из -за ошибок в iomanip не стал использовать:
C++
1
2
3
4
5
6
7
void Byte2Hex(byte bValue[], char lpBuff[])
{
    std::wostringstream oss;
    for(int i = 0; i < длина bValue; ++i) oss << std::hex << std::setw(2) << std::setfill('0') << static_cast<unsigned>(bValue[i]);
    std::copy(lpBuff, длина чего - то, bValue);
    //strcpy(lpBuff, oss.str());
}
Ошибка C2338 wrong character type for setfill AES Uncript d:\programs\microsoft visual studio 2015\vc\include\iomanip 60
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.12.2015, 15:42
Так попробуй:
C++
1
std::setfill(L'0')
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 16:08  [ТС]
А как строку скопировать?

C++
1
2
3
В 1м варианте, я вообще синтаксиса не понял, во 2м не знаю как oss в char вывести:
std::copy(lpBuff, длина чего - то, bValue);
//strcpy(lpBuff, oss.str());
Добавлено через 20 минут
C++
1
2
3
4
5
6
void Byte2Hex(byte bValue[], char lpBuff[])
{
    std::wostringstream oss;
    for(int i = 0; i < sizeof(bValue); ++i) oss << std::hex << std::setw(2) << std::setfill(L'0') << static_cast<unsigned>(bValue[i]);
    strcpy_s(lpBuff, sizeof(lpBuff),(char *)oss.str().c_str());
}
1 букву e выдаёт...
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.12.2015, 16:31
Почему у тебя так много лишнего?
C++
1
strcpy(lpBuff, oss.str().c_str());
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 16:38  [ТС]
Не знаю, я вообще ничего не понимаю в стдл, и не только...
Чем дальше в С, тем тупее себя чувствую...

C++
1
(char *)oss.str().c_str()
- проверил в этом проблема...
C++
1
sizeof(bValue)
Не будет же работать здесь?
C++
1
void Byte2Hex(byte bValue[], char lpBuff[])
Неизвестная длина массива...

Может нужно так:
C++
1
void Byte2Hex(byte bValue, char lpBuff)
Или так?
C++
1
void Byte2Hex(byte * bValue, char * lpBuff)
Добавлено через 2 минуты
Вот в павне, когда передаёшь массив неопределённой длинны, нужно передать ешё и его размер, иначе никак...

Типа того:
C++
1
2
3
4
5
6
void Byte2Hex(byte bValue[], size_t bSize, char lpBuff[], size_t cSize)
{
    std::wostringstream oss;
    for(int i = 0; i < bSize; ++i) oss << std::hex << std::setw(2) << std::setfill(L'0') << static_cast<unsigned>(bValue[i]);
    strcpy_s(lpBuff, cSize, (char *)oss.str().c_str());
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.12.2015, 16:40
В той теме посмотри. Ты постоянно меняешь тип строки. Если для древнего char делать, то std::ostringstream, а если для wchar_t, то std::wostringstream.
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 16:42  [ТС]
Понял, спасибо.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.12.2015, 16:44
sizeof() вообще не работает для строк. Только для массива целиком, если он объявлен там же.

Добавлено через 1 минуту
Вот так:
C++
1
2
3
4
5
6
void Byte2Hex(byte bValue[], size_t bSize, wchar_t *lpBuff)
{
    std::wostringstream oss;
    for(int i = 0; i < bSize; ++i) oss << std::hex << std::setw(2) << std::setfill(L'0') << static_cast<unsigned>(bValue[i]);
    wcscpy(lpBuff, oss.str().c_str());
}
Тебе вообще не нужна длина этой строки. Не используй эти нестандартные функции с "_s".
1
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 16:45  [ТС]
Так вс сам навязывает, говорит они безопаснее...
Хотя я не собираюсь записывать в строку с размером 10, 20символов...
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.12.2015, 16:47
И ты сразу послушался? Они не соответствуют стандарту и только путают всё.
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 16:51  [ТС]
Это в свойствах проекта уровень предупреждений изменить?
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 16:58  [ТС]
Не даёт скомпилировать, пишет что это ошибка, использовать без _s...
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.12.2015, 17:40
SDL убери.
0
 Аватар для артист
50 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,611
28.12.2015, 19:38  [ТС]
Наконец, то до меня дошло.
Я понял что мне нужно

char вообще не нужен.
Всё в wchar_t.
sha1 который в byte вывести в окно ввода в 16й системе.
А так же прочитать в 16й текст в окне, и засунуть его в byte.

1 ошибка в >>
C++
1
iss >> std::hex >> n;
Ошибка (активно) отсутствует оператор ">>", соответствующий этим операндам
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
37
38
39
40
41
42
#include <windows.h>
#include <iostream>
#include <sstream>
#include <iomanip>
 
void Byte2HexW(byte bValue[], size_t bSize, wchar_t * lpBuff) // В двухбайтовую строку
{
    std::wostringstream oss;
    for (int i = 0; i < bSize; ++i) oss << std::hex << std::setw(2) << std::setfill(L'0') << static_cast<unsigned>(bValue[i]);
    wcscpy(lpBuff, oss.str().c_str());
}
void HexW2Byte(wchar_t lpBuff[], byte bValue[]) // Из двухбайтовой строки
{
    unsigned n;
    std::wstring s = lpBuff;
    for(size_t i = 0, j = 0; i < s.length(); i += 2, ++j)
    {
        std::wostringstream iss(s.substr(i, 2));
        iss >> std::hex >> n;
        bValue[j] = n;
    }
}
 
int main(int argc, char ** argv)
{
    setlocale(LC_ALL, "Russian");
 
    byte result[72] = // Это какая - то строка...
    {
        0xd0, 0xa2, 0xd0, 0xb5, 0xd0, 0xba, 0xd1, 0x81, 0xd1, 0x82, 0x20, 0xd0, 0xbf, 0xd1, 0x80, 0xd0,
        0xbe, 0xd1, 0x81, 0xd1, 0x82, 0xd0, 0xbe, 0xd0, 0xb9, 0x2c, 0x20, 0x65, 0x6e, 0x67, 0x6c, 0x69,
        0x73, 0x68, 0x2c, 0x20, 0x31, 0x32, 0x33, 0x34, 0x35, 0x2c, 0x20, 0xe4, 0xba, 0x8b, 0xe5, 0xa5,
        0x89, 0xe8, 0x81, 0x96, 0xe7, 0xa6, 0xae, 0xe9, 0x87, 0x8b, 0x20, 0x2d, 0x20, 0xd0, 0xba, 0xd0,
        0xbe, 0xd0, 0xbd, 0xd0, 0xb5, 0xd1, 0x86, 0x2e
    };
    wchar_t wHex[72 * 2 + 1]; Byte2HexW(result, 72, wHex); // В однобайтовую строку из byte
    byte bValue[72]; HexW2Byte(wHex, bValue); // Из однобайтовой строки в byte
 
    std::wcout << "Это многобайтовая строка hex : " << wHex << std::endl << "Это вообще не строка, byte : " << bValue << std::endl;
 
    system("pause");
}
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
28.12.2015, 21:59
Там std::wistringstream.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2015, 21:59
Помогаю со студенческими работами здесь

Hex (3 byte) to Float
С внешнего устройства приходят данные 40 00 00, 40 80 00, 7F FF FF и тп. Известно, что 7 бит первого байта это знак (если равен...

Преобразовать BYTE в HEX
Я читаю содержимое файла в BYTE и потом хочу вывести его в editbox, но сначала мне нужно преобразовать его в HEX. Тут я не совсем понимаю...

Вывести в окно программы hex массив byte
Вот есть массив: byte AESKey; Он уже заполнен, как мне вывести в консоль в 16м виде весь этот массив? Видел где - то, но вспомнить...

Как перевести строку в hex и обратно?
Немогу найти в гугле функцию какбы перевести строку в hex и обратно, мб у кого завалялась?

Как получить из двух byte один int?
Собственно вот, есть две переменные byte byte b1 = 0x03; byte b2 = 0x40; надо получить одну типа int, но чтобы b1 был...


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru