#c #string #hex #byte
#c #строка #шестнадцатеричное #байт
Вопрос:
Как преобразовать шестнадцатеричную строку в короткую в c ?
Допустим, у вас есть
string hexByte = "7F";
Как преобразовать это в байт? Я предполагаю, что это символ или int8_t в c
Я пытался:
wstring hexString = "7F";
unsigned char byte;
stringstream convert(hexString);
convert >> byte;
Комментарии:
1. Не спамите языковыми тегами!
2. @Olaf извините, думал, что оба языка связаны с точки зрения синтаксиса
3.
int8_t
существует, только если у вас есть 8 бит на байт. Покажите свой код. Вы хотя бы предприняли какие-то усилия самостоятельно? Примечание: использование неподписанных типов значительно упростит вашу жизнь.4. @MikeD считывает из a,
std::istringstream
используяstd::hex
манипулятор ввода-вывода.5. И вы не добавили Java, C #, D и Rust только потому, что тогда вы не могли добавить больше тегов? C и C — разные языки, пожалуйста, имейте это в виду. Если кто-то скажет вам иначе: спросите, где стандарт C допускает VLAS или в C есть
class
ключевое слово.
Ответ №1:
// 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"u3084u3042"); // 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/
Ответ №2:
Преобразуйте каждый символ шестнадцатеричного ввода в целочисленный тип
int char2int(char input)
{
if(input >= '0' amp;amp; input <= '9')
return input - '0';
if(input >= 'A' amp;amp; input <= 'F')
return input - 'A' 10;
if(input >= 'a' amp;amp; 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 amp;amp; src[1])
{
*(target ) = char2int(*src)*16 char2int(src[1]);
src = 2;
}
}