【问题标题】:C++: how to convert string vector elements into unsigned char?C++:如何将字符串向量元素转换为无符号字符?
【发布时间】:2013-11-29 11:45:14
【问题描述】:

我有一个字符串向量和一个自声明的 unsigned char 类型:

std::vector<std::string> result;
typedef unsigned char BYTE;
BYTE data[11];

我已经为结果赋值。现在我想将result的元素复制到data中:

for ( int i=0; i<11; i++)
{
    data[i] = result[i];
}

但它给出了错误,说No suitable conversion function from std::string to BYTE exists

我该如何处理?

更新:

首先,感谢大家宝贵的 cmets 和答案。 在我的代码中,我的 result 包含六个元素,例如这些值:

0x30
0x31
0x32
0x33
0x34
0x35

我尝试作为 Raxvan 的答案,但最后,data 仅捕获那些字符串元素的第一个值,即全零。我真正想要做的是让data 具有与result 相同的值,但属于BYTE 类型,因此类似于这样分配值:

BYTE data[] = { 0x30, 0x31, 0x32, 0x33, 0x34, 0x35 } // this line works correctly

【问题讨论】:

  • 一般情况下是不可能的 - 因为你有未知数量的未知长度字符串,并尝试将它们全部放入一个固定长度的 11 字节数组中
  • 将字符串(任意数量的字符)转换为单个字节是没有意义的。你到底想要data 数组中的什么?
  • std::vector&lt;std::string&gt; result; 实际上是一个二维字符数组,要获得单个字符,您必须编写result[i][j]。但是data一维,这就是问题所在。所以可能解决方案是使result 成为一维,或者使data 成为二维。对此我无能为力,因为我没有更大的图景。
  • 您的BYTE 是单个字符,并且您正在尝试存储一个二维数组。
  • 确实如此,如果您完全放弃了向量/数组方面,并尝试仅将一个字符串分配给一个 BYTE,您会发现它也不起作用。然后如果你问我们为什么,我们会想,“他为什么要把整个字符串塞进一个字节?”。在这一点上,我们可能还想知道您是否意味着 BYTE 是指向 char 的指针,就像 C 倾向于处理字符串的方式一样,因为这实际上是可行的。

标签: c++ string char type-conversion


【解决方案1】:

你混淆了你的类型。

data 是一个 BYTE 数组(所以基本上可以容纳 11 个字符), 但resultstring 的数组(意味着它可以包含多个字符串,每个字符串都包含多个字符)。

因此,根据您的实际需要,您可以做两件事:

如果您需要将所有字符串都转换为 BYTE 数组,则创建一个 BYTE 数组的数组:

// adapt sizes to your needs
size_t const MaxStrSize = 11; // allows to hold 10 characters (+ 0 delimiter)
size_t const MaxStrCount = 11;
BYTE data[MaxStrCount][MaxStrSize];

for (int j=0; j<MaxStrCount && j<result.size(); ++j)
{
    for ( int i=0; i<MaxStrSize && i<result[i].length(); i++)
    {
        data[j][i] = result[j][i];
    }
}

否则,如果您只想访问向量中包含的一个字符串(例如第一个字符串):请参阅Raxvan's answer

【讨论】:

    【解决方案2】:

    string 封装了一个char 数组,编译器不知道如何将其转换为一个字符。如果你想从字符串中取出第一个字符,那么你可以这样做:

    for ( int i=0,j = 0; i<11 && j < result.size(); j++)
    {
        if(result[j].size() != 0) //safety first.
            data[i++] = result[j][0];
    }
    

    【讨论】:

      【解决方案3】:

      很久没写CPP代码了,请原谅语法错误。 我认为 OP 试图实现的是将二维数组转换为单个逗号分隔的字符串。

      这是我的示例代码:

       char [] DATA = "";
      
              for ( int j = 0;j < result.count(); j++)
              { 
                if(j < result.count()-2)
                result = strcat(result, ",")
                DATA =       strcat(DATA, result);
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        • 2020-02-27
        相关资源
        最近更新 更多