从字符串流到无符号字符

from stringstream to unsigned char

本文关键字:无符号 字符 字符串      更新时间:2023-10-16

这是我的问题:

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

无符号字符值正好是一个字节的值。一个字节足以存储范围为0-255的非实数整数,或者仅存储一个符号(如"1"、"2"等)。因此,您可以将数字12存储在无符号字符值中,但不能存储"12"字符串,因为它由两个字符元素组成——"1"answers"2"(普通c字符串甚至有第三个"\0"字符串终止字符)。对于实际值,如16.2,您需要四个无符号字符来存储它的每个符号-"1"、"6"、"."、"2’。

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

#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;
}

采用STL设计的直线:

typedef std::basic_istringstream<unsigned char> uistringstream;

使用

typedef std::basic_string<unsigned char> ustring;

和用于转换

ustring ustr = (const unsigned char*) "char data";