如何在c++中赋值string给unsigned char[]

How to assign string to unsigned char[] in c++

本文关键字:unsigned char string 赋值 c++      更新时间:2023-10-16

我很难理解类型转换,我试图通过将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;
  }

我错过了什么?

如果您试图打印出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字符,而不是打印时产生'0'到'9'的字符。这些字符可以通过以下代码放入数组中:

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

同样,这仅适用于尝试比较文本数据的情况。如果您试图转换为数字,并将该数组中的条目与该数字进行比较,则需要原始数组。

2)你是正确的,a[5]将访问a的第六个元素。如果比较的是文本值而不是数字值,则只需要访问字符串的第一个元素即可进行比较。如果您知道字符串的大小至少为1个元素。因为您在这段代码上面定义了它,所以没问题,但是在用户输入的情况下,您需要检查。这个比较的正确语法是a[5] == b[0],因为strings上的[]运算符将返回一个char

同样,只有在比较文本值时,上述内容才适用于您的答案。如果您比较的是数值,那么您的原始代码是正确的。

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

下面是一个示例链接,该示例比较字符串和(修改后的)字符数组作为文本数据。如果您比较的是数字数据,那么代码中唯一的错误是3).

如果你确定你的字符串b只有一个字符:

char c = b[0];

´s。

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

也许将其转换为字符串进行比较会更好:

#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