-1

我正在从命令行读取一行字符,即

节目名称 0102030405060708

argv[1]是类型char *argv[]

argv[1]0102030405060708

这应该用作其十六进制表示形式的 8 个字符的列表。
我需要做的是取这个值并将它分成几个部分。IE

01、02、03、04 ...

并将它们用作十六进制值。

本质上我需要得到01, 02, 03....十六进制表示的字符

我不知道该怎么做。任何帮助将不胜感激。

4

2 回答 2

2

您可以拆分字符串并处理 2 个字符长的标记,或者节省一些内存(在这种情况下额外的 16B 无关紧要,但这是一个好习惯)并“就地”执行。我只会描述我提到的第二种方式。

您需要一个循环来遍历该字符串,一次推进 2 个字符。您希望将 2 个字符数转换为实际字符的每次迭代,有关如何执行此操作的提示是使用乘法运算符和这些数字使用的数字系统的基数(在本例中为 16)。

您可以存储每次迭代的结果并在之后打印,或者更方便的是,每次迭代都打印它。

于 2013-07-18T21:46:34.973 回答
0

假设我对您的理解正确,我认为您可以使用字符串流相当巧妙地做到这一点。

std::stringstream stream(argv[1]);
std::string twochars;
while (stream >> std::setw(2) >> twochars) {
  int num;
  std::stringstream twocharstream(twochars);
  twocharstream >> std::hex >> num;
  // Do something with the number here
}

您首先一次将两个字符流式传输到字符串twochars中。然后,您从这两个字符创建另一个流,您使用hex操纵器将其流式传输为整数以转换为十六进制。

如果您需要数字所代表的字符(即 41 是字符 'A'),那么您可以简单地执行以下操作:

char c = num;
于 2013-07-18T22:12:25.500 回答