问题描述
在 C++ 中,我试图将命令行 *argv[] 指针(3 个参数)转换为无符号字符向量,即 mytest 148 64 127
我得到了一个向量:
vector<unsigned char> msg;
向量包括 3 个无符号字符:msg = {0,0}
当我尝试以这种方式转换时,
unsigned char c1 = *argv[1];
unsigned char c2 = *argv[2];
unsigned char c3 = *argv[3];
msg = {c1,c2,c3}
我只得到这些字符的第一个字符。
IE。
在命令行中我输入:mytest 148 64 127
我得到:1、6 和 1
解决方法
最简单的就是转换为使用字符串。
vector<string> msg;
如果您真的想要无符号字符,那么您需要执行以下操作:
vector<vector <unsigned char>> msg;
您可以通过执行将指针保存到 argv 而不是复制字符
vector<unsigned char *> msg;
msg.push_back(reinterpret_cast<unsigned char *>(argv[0]));
,
我建议创建一个字符串向量:
#include <iostream>
#include <vector>
int
main(int argc,char *argv[]) {
std::vector<std::string> args;
for (int i = 1; i < argc; i++) {
args.push_back({ argv[i] });
}
for (auto a: args) {
std::cout << a << std::endl;
}
return 0;
}
,
您只将每个参数字符串的第一个 char
保存到您的 vector
中。
unsigned char c1 = *argv[1];
和做一样:
const char *str = argv[1];
unsigned char c1 = str[0]; // <-- 1st char only!
对于您正在尝试的内容,您需要将每个参数字符串按原样解析成它所代表的数值,以便参数字符串 "148"
"64"
{ {1}} 产生整数 "127"
148
64
。您可以为此使用 std::stoi()
或 std::stol()
,例如:
127