将 *argv[]命令行参数转换为无符号字符向量

问题描述

在 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