Как представить беззнаковые значения char в виде шестнадцатеричной строки?

Я хочу преобразовать содержимое массива символов без знака в шестнадцатеричное строковое представление.
Может ли кто-нибудь помочь с функцией или выходом?

unsigned char codeslink[5] ={ 0x33, 0x74, 0x74, 0x73, 0x72};
std::string my_std_string(reinterpret_cast<const char *>(codeslink), 5);
std::string my_std_string((const char *)codeslinks);

Я хочу получить возвращаемые значения 3374747372 в виде символа или строки.

обновление: это функция, которую я придумал, используя ответ @πάνταῥεῖ:. Я хочу сделать ее лучше и сделать ее надежной для обработки unsigned char, например 0x00,0x04,0x00,0x11, различной длины.

std::string Return_Uchar_To_String(unsigned char uns_char, size_t uns_char_len)
    {
        std::ostringstream oss;
        oss << std::hex << std::setw(2) << std::setfill('0');
        for(size_t i = 0; i < uns_char_len; ++i)
        {
            oss << (unsigned int)uns_char[i];
        }


        return oss.str();
    }

person DavidoLLP    schedule 15.03.2016    source источник
comment
Это не делается через кастинг.   -  person πάντα ῥεῖ    schedule 15.03.2016
comment
Это не сработает: 0x33 != "33". В противном случае это будет дубликат: массив символов в stdstring"> stackoverflow.com/questions/4691608/   -  person NathanOliver    schedule 15.03.2016
comment
@R_Kapp std::string my_std_string = std::to_string(codeslink); не понимаю, что ты имеешь в виду? @πάντα ῥεῖ как это лучше всего сделать? @NatanOliver, у меня это тоже не сработало   -  person DavidoLLP    schedule 15.03.2016
comment
Комментарий @R_Kapp - чушь относительно шестнадцатеричных значений.   -  person πάντα ῥεῖ    schedule 15.03.2016
comment
@DavidoLLP Я написал ответ на то, что вам нужно.   -  person πάντα ῥεῖ    schedule 15.03.2016
comment
@πάνταῥεῖ: Он сказал, что хочет получить конкретное возвращаемое значение в виде строки; может быть, я неправильно понимаю вопрос (скорее всего так), но просто используйте std::to_string и сделайте его одним? Или еще лучше std::string my_std_string = "3374747372";?   -  person R_Kapp    schedule 15.03.2016
comment
Если у вас есть новый вопрос, вы должны создать новый вопрос и задать его там (при условии, что он соответствует стандартам этого сайта). Не задавайте новые вопросы по старому вопросу, на который уже есть ответ.   -  person Weak to Enuma Elish    schedule 15.03.2016


Ответы (1)


Я хочу получить возвращаемые значения 3374747372 в виде символа или строки.

Кастинг в данном случае не работает.

Вы можете использовать форматирование текста IO, чтобы получить шестнадцатеричное строковое представление содержимого массивов:

unsigned char codeslink[5] ={ 0x33, 0x74, 0x74, 0x73, 0x72};
std::ostringstream oss;
oss << std::hex << std::setfill('0');
for(size_t i = 0; i < 5; ++i) {
    oss << std::setw(2) << (unsigned int)codeslink[i];
}
std::string result = oss.str();

Демо

person πάντα ῥεῖ    schedule 15.03.2016
comment
Спасибо за редактирование заголовка сообщения, я опубликовал функцию, которую я получил от нее, чтобы сделать ее гибкой для различных размеров беззнаковых символов. Можете ли вы взглянуть на функцию и помочь мне реорганизовать ее, чтобы она была надежной? - person DavidoLLP; 15.03.2016
comment
@DavidoLLP Кажется, у вас небольшая ошибка в подписи вашей функции: std::string Return_Uchar_To_String(unsigned char uns_char, size_t uns_char_len) должно быть std::string Return_Uchar_To_String(const unsigned char* uns_char, size_t uns_char_len), иначе все выглядит нормально и будет надежным. - person πάντα ῥεῖ; 15.03.2016
comment
@ πάντα ῥεῖ спасибо за обновление, я попробовал свою функцию с этим значением unsigned char codeslink[4] = { 0x00, 0x00, 0x02, 0x11 };, я получил это 000211 вместо 00000211. - person DavidoLLP; 15.03.2016
comment
@DavidoLLP Извините, я забыл, что setw() не привязан к потоку, а просто меняет поведение для следующего поля вывода. - person πάντα ῥεῖ; 15.03.2016
comment
@ πάντα ῥεῖ не обижайтесь, вы были полезны, спасибо - person DavidoLLP; 15.03.2016