0

这是我的问题:

std::string str = "12 13 14 15 16.2";  // my input

我想要

unsigned char myChar [4]; // where myChar[0]=12 .. myChar[0]=13 ... etc...

我尝试使用 istringstream:

  std::istringstream is (str);
  unsigned char myChar[4];
  is >> myChar[0]  // here something like itoa is needed 
     >> myChar[1]  // does stringstream offers some mechanism 
                   //(e.g.: from char 12 to int 12) ?
     >> myChar[2]
     >> myChar[3]

但我得到了(显然)

myChar[0]=1 ..myChar[1]=2 ..myChar[2]=3

没办法...我必须使用 sprintf 吗??!不幸的是,我不能使用 boost 或 C++11 ...

TIA

4

2 回答 2

0

我知道的唯一解决方案是解析字符串。这是一个例子:

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main ()
{
    stringstream ss("65 66 67 68 69.2");
    string value;
    int counter=0;

    while (getline(ss, value, ' '))
    {
        if (!value.empty())
        {
            cout << (unsigned char*) value.c_str() << endl;
            counter++;
        }
    }
    cout << "There are " << counter << " records." << endl;
}
于 2013-06-28T11:23:42.447 回答
0

无符号字符值恰好是一个字节值。一个字节足以存储 INTEGER 而不是 0-255 范围内的实数,或者仅存储一个符号,如“1”、“2”等。因此,您可以将数字 12 存储在 unsigned char 值中,但不能存储“12”字符串,因为它由 2 个字符元素组成 - '1' 和 '2'(普通 c 字符串甚至有第三个 '\0' 字符串终止字符)。至于像 16.2 这样的实数值,您需要四个无符号字符来存储它所具有的每个符号 - '1'、'6'、'.'、'2'。

于 2013-06-28T10:31:17.543 回答