首页 > 解决方案 > 如何将 unsigned short 转换为 unsigned char 并将值存储在字符串中

问题描述

我正在尝试将 unsigned short 值转换为 unsigned char 类型并将结果存储在字符串中。然后再次将字符串转换回无符号字符以取回原始无符号短值。我得到了围绕这个转换的结构。

我已将无符号短值转换为字符串。如何使用无符号字符数组取回无符号短值。请帮我解决这个问题

unsigned short a=1234;
 unsigned short b=5678;
 std::string str="";
 str+=std::to_string((unsigned char)a & 0xFF);
 str+=std::to_string((unsigned char)(a>>8)& 0xFF);
 str+=std::to_string((unsigned char)b & 0xFF);
 str+=std::to_string((unsigned char)(b>>8)& 0xFF);
 cout<<"String Value: "<<str<<endl;

预期输出为“12345678”,其中 a=1234 b=5678;

标签: c++c++11

解决方案


除非你除以 100,否则你不可能从 1,234 中得到 12。同样,要从 5,678 中得到 56,你需要除以 100。你的代码不能除以 100。所以我不明白为什么您会期望字符串中有“12”或“56”。

十进制的 1234 是十六进制的 04D2,与十六进制的 FF 进行与运算得到十六进制的 D2 或十进制的 210。为什么你不期望字符串中有一个“210”?

同样,要从 1234 中获得 12,您需要除以 100。要从 1234 中获得 34,您需要 mod 100。因此,要获得预期的输出,您的代码需要如下所示:

#include <iostream>

int main()
{
    unsigned short a=1234;
    unsigned short b=5678;
    std::string str="";
    str+=std::to_string((unsigned char)(a / 100));
    str+=std::to_string((unsigned char)(a % 100));
    str+=std::to_string((unsigned char)(b / 100));
    str+=std::to_string((unsigned char)(b % 100));
    std::cout<<"String Value: "<<str<<std::endl;
}

字符串值:12345678


推荐阅读