如何在c ++中将字符串赋值给unsigned char []

时间:2015-06-09 18:57:47

标签: c++ casting unsigned

我很难理解类型转换,我试图通过将string的内容分配给unsigned chars数组来提高我的理解力。我希望下面的代码能够打印true,但事实并非如此。

unsigned char a[10]={0,1,2,3,4,5,6,7,8,9};
        string b="5";
        if(a[5]==(unsigned char)atoi(b.c_str())){
               cout<<true<<endl;
  }

我错过了什么?

3 个答案:

答案 0 :(得分:1)

如果您尝试打印true,示例代码会出现一个或多个问题。多少取决于你是如何尝试这样做的。 如果您要将文字与其他文字进行比较,我的前两点适用。如果您尝试将文字转换为数字并比较数字,请忽略它们。

unsigned char a[10]={0,1,2,3,4,5,6,7,8,9}; // 1
        string b="5";
        if(a[5]==(unsigned char)atoi(b.c_str())){ // 2
               count<<true<<endl; // 3
}

1)虽然这会产生一个无符号字符数组,但它们不是文本值。该数组中的值是前10个ASCII characters,而不是打印时产生'0'到'9'的字符。可以使用以下代码将这些字符放在数组中:

    unsigned char a[10]={'0','1','2','3','4','5','6','7','8','9'}; 

同样,只有在您尝试比较文本数据时才会这样做。如果您尝试转换为数字并将此数组中的条目与该数字进行比较,则需要原始数组。

2){J} a[5]访问a的第六个元素是正确的。如果要比较文本值而不是数值,则只需访问字符串的第一个元素进行比较。 如果您知道字符串的大小至少为1个元素。由于您在此代码上方定义了它,这很好,但在用户输入的情况下,您需要检查。这种比较的正确语法(同样是deviantfan所说)是a[5] == b[0],因为[]上的strings运算符将返回char

再一次,只有在比较文本值时,上述内容才适用于您的答案。如果您要比较数值,则原始代码是正确的。

3)您没有在true周围放置引号。虽然这会编译,甚至打印一些东西 - 它不会是true,除非满足一些你在编码生涯早期不太可能遇到的条件。你可能想要的是“真实”,这将使输出打印成真。此外,您需要cout,而不是count

下面是一个link示例,它将字符串和(修改过的)字符数组作为文本数据进行比较。如果您要比较数字数据,那么您的代码唯一的错误就是3)。

答案 1 :(得分:0)

如果您确定字符串char c = b[0]; 只有一个字符:

atoi

就是这样。

IAsyncCommand不提取字符,而是将数字内容解析为整数。

答案 2 :(得分:0)

也许最好转换为字符串进行比较:

#include <iostream>
#include <string>

int main() {
    unsigned char a[10]={0,1,2,3,4,5,6,7,8,9};
    std::string b="5";
    std::cout<<std::boolalpha<<(std::to_string(a[4])==b)<<std::endl;
    std::cout<<std::boolalpha<<(std::to_string(a[5])==b)<<std::endl;
    return 0;
}

http://ideone.com/9cvce4