如何在c++中赋值string给unsigned char[]
How to assign string to unsigned char[] in c++
我很难理解类型转换,我试图通过将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 - 如何使用多次 memcpy 转换回 std::vector<unsigned char>?
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 让 'std::vector<unsigned char>' 从 'std::string' 中窃取内存
- 使用外部变量会导致"unsigned char"错误LNK2001
- CPPrestsdk (Casablanca) JSON 值到 std::vector<unsigned char>
- memcpy unsigned char to int
- 有没有办法将 vector<unsigned char> 插入 postgresql 表中,具有 bytea 属性,没有 UTF8 编码错误?
- 将数据从 vector<unsigned char> 传输到无符号 char[]
- 如何修复此 OpenCV 错误:断言失败((无符号)i < (无符号)cn) 在 cv::Vec<unsigned char,3>:::运算符 (), 文件
- 你什么时候会使用"signed char"而不是"unsigned char"?
- 错误:初始化时无法将'const unsigned char (*)[7]'转换为'const unsigned char (*)[]'
- 如何将std :: string传递到C 中的const unsigned char **
- 类型 "unsigned char *" 的参数与类型 "const char *" 的参数不兼容
- C 如何在功能调用中从char *转换为unsigned char *
- 从'byte* {aka unsigned char*}'到'dword {aka长unsigned int}'失去精度
- 'unsigned short var'与'unsigned char var [2]' C++
- C++ cast char * to unsigned char
- CORBA IDL to C++ - char vs. unsigned char?
- Arduino:未定义的对"I2CRW::readByte(unsigned char, unsigned char)"的引用