处理C ++中的一系列字符

时间:2013-07-18 21:39:16

标签: c++ arrays char hex

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

  

progname 0102030405060708

argv[1]的类型为char *argv[]

argv[1] 0102030405060708

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

  

01,02,03,04 ......

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

基本上我需要获取十六进制中01, 02, 03....代表

的字符

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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;