将 vector<unsigned char> {1,2,3} 转换为字符串"1-2-3" AS DIGITS
Convert vector<unsigned char> {1,2,3} into string "1-2-3" AS DIGITS
我想在屏幕上显示std::vector<unsigned char>
中的数字,但在到达收件人的途中,我需要将这些数字塞入std::string
中。
无论我尝试什么(atoi
,reinterpret_cast
,string.c_str()
...),都给了我一个废话,或者那些原始数字的字母表示 - 即它们相应的ASCII字符。
那么我如何轻松(最好是标准方法)将vector<unsigned char> {1,2,3}
转换为string "1-2-3"
呢?
在原始帖子(后来编辑)中,我提到,我可以用C#或Java做到这一点。应 πάντα ῥεῖ 的请求,在 C# 或 Java 中提供示例,这里有一个快速的 Linq C# 方法:
public static string GetStringFromListNumData<T>(List<T> lNumData)
{
// if (typeof(T) != typeof(IConvertible)) throw new ArgumentException("Expecting only types that implement IConvertible !");
string myString = "";
lNumData.ForEach(x => myString += x + "-");
return myString.TrimEnd('-');
}
以下是我的处理方式:
std::vector<unsigned char> v {1, 2, 3};
std::string s; // result
auto sep = ""; // continuation separator
for(auto n: v)
{
s += sep + std::to_string(n);
sep = "-"; // change the continuation separator after first element
}
std::cout << s << 'n';
延续分隔符开始时为空,并在连接第一个输出后进行更改。
输出:
1-2-3
只需使用std::ostringstream
:
std::vector<unsigned char> v{1,2,3};
std::ostringstream oss;
bool first = true;
for(auto x : v) {
if(!first) oss << '-';
else first = false;
oss << (unsigned int)x;
}
std::cout << oss.str() << std::endl;
然而,另一个例子:
std::vector<unsigned char> v{1,2,3};
std::ostringstream str;
std::transform(v.begin(), v.end(), std::ostream_iterator<char>(str, "-"), [](unsigned char c){ return '0' + c;});
std::cout << str.str();
[编辑]
不幸的是,上面将添加额外的尾随-
符号,以防止它 - 需要更复杂的代码:
std::transform(v.begin(), v.end(), std::ostream_iterator<std::string>(str), [&](auto c){
return (str.rdbuf()->in_avail() ? "-" : "") + std::to_string(c);
});
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 如何将这个std::字符串转换为std::基本字符串
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 如何在C++中将十六进制字符串转换为文本数据
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 如何从字符串转换为双精度*
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- 如何在C++中将 Python 字符串转换为其转义版本?
- 如何在 C++11 中将标准::字符串转换为标准::u32字符串?
- 如何将整数字符串转换为整数的二维向量?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 将文件复制到自定义位置,存在字符串转换问题
- 将ANSI C字符串转换为UNICODE
- 如何将节点 V8 字符串转换为 C++ 字符串
- 在C++中将字符串转换为双精度,而无需科学记数法
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 如何在C++中将字符串转换为双精度?
- 将字符串转换为无符号字符数组/字节数组