2016-10-24 2 views
0

Как вы преобразовываете шестнадцатеричную строку в short в C++?Преобразование Hex в Byte в C++

Допустим, у вас есть

string hexByte = "7F"; 

Как преобразовать, что в байте? Что я предполагаю, что это символ или int8_t в C++

Я пробовал:

wstring hexString = "7F"; 
unsigned char byte; 
stringstream convert(hexString); 
convert >> byte; 
+0

Не спам теги! – Olaf

+0

@ Olaf извините, что оба языка связаны с синтаксисом –

+0

'int8_t' существует только в том случае, если у вас есть 8 бит на байт. Покажите свой код. Вы даже приложили некоторые усилия самостоятельно? Примечание: использование неподписанных типов сделает вашу жизнь намного проще. – Olaf

ответ

2
// converting from UTF-16 to UTF-8 
#include <iostream>  // std::cout, std::hex 
#include <string>   // std::string, std::u16string 
#include <locale>   // std::wstring_convert 
#include <codecvt>  // std::codecvt_utf8_utf16 

int main() 
{ 
    std::u16string str16 (u"\u3084\u3042"); // UTF-16 for YAA (やあ) 

    std::wstring_convert<std::codecvt_utf8_utf16<char16_t>,char16_t> cv; 

    std::string str8 = cv.to_bytes(str16); 

    std::cout << std::hex; 

    std::cout << "UTF-8: "; 
    for (char c : str8) 
    std::cout << '[' << int(static_cast<unsigned char>(c)) << ']'; 
    std::cout << '\n'; 

    return 0; 
} 

http://www.cplusplus.com/reference/locale/wstring_convert/to_bytes/

0

Преобразовать каждый символ шестнадцатеричной ввода в целочисленный тип

int char2int(char input) 
{ 
    if(input >= '0' && input <= '9') 
    return input - '0'; 
    if(input >= 'A' && input <= 'F') 
    return input - 'A' + 10; 
    if(input >= 'a' && input <= 'f') 
    return input - 'a' + 10; 
    throw std::invalid_argument("Invalid input string"); 
} 

// This function assumes src to be a zero terminated sanitized string with 
// an even number of [0-9a-f] characters, and target to be sufficiently large 
void hex2bin(const char* src, char* target) 
{ 
    while(*src && src[1]) 
    { 
    *(target++) = char2int(*src)*16 + char2int(src[1]); 
    src += 2; 
    } 
} 
Смежные вопросы