Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;使用atoi()转换单个字符,而不是多个字符_C++_String_C++17 - Fatal编程技术网

C++ C++;使用atoi()转换单个字符,而不是多个字符

C++ C++;使用atoi()转换单个字符,而不是多个字符,c++,string,c++17,C++,String,C++17,我用以下简单代码通过网络发送消息: SSL_write(ssl, argv[1], strlen(argv[1])); 然后,我在服务器上接收消息,并将消息的第一个字符转换为int,代码如下: char buf[1024] = {0}; SSL_read(ssl, buf, sizeof(buf)); std::cout << atoi(&buf[0]); charbuf[1024]={0}; SSL_read(SSL,buf,sizeof(buf)); std::cou

我用以下简单代码通过网络发送消息:

SSL_write(ssl, argv[1], strlen(argv[1]));
然后,我在服务器上接收消息,并将消息的第一个字符转换为int,代码如下:

char buf[1024] = {0};
SSL_read(ssl, buf, sizeof(buf));
std::cout << atoi(&buf[0]);
charbuf[1024]={0};
SSL_read(SSL,buf,sizeof(buf));
std::cout最简单的方法是(如果您使用的是ASCII编码):

intv=buf[0]-“0”;

你能通过阅读
atoi()
的文档来解决这个问题吗,注意解释它使用了一个C风格的
'\0'
-终止的
char
缓冲区的部分,然后相应地更新你的代码。
std::cout@niknik2016因为它不会做OP想要的事情?@SamVarshavchik哇!来自非C++背景,我没有意识到
atoi()
不仅仅是将
&buf[0]
引用的值转换为int,而是使用
&buf[0]
是继续从
buf
读取值的引用这一事实。我想我需要进一步理解C++中引用/指针的实际用法。@ RoMunsOn<代码> Buf是<代码> char []/Cuth>数组,其中<代码> Buf(0)< /C>是一个单一的代码> char < /C> >,所以<代码>和BUF(0)< /C> >是<代码> char */COD>指针。code>atoi()
只是假设传递给它的
char*
以null结尾。这是记录在案的行为!但是
buf
的内容不是以null结尾的。此转换不依赖于ASCII。C和C++都要求字符编码< > '''…9'
应连续且递增。这意味着
buf[0]-'0'
适用于每个字符编码。假设
buf[0]
包含一个
char
,范围为
'0'..'9'
。OP的代码示例不能保证这一点。从任何不在该范围内的
字符中减去
'0'
,将产生不理想的结果。@PeteBecker我不知道!很高兴知道。请提供此要求的参考资料,好吗?“在源字符集和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应比前一个字符的值大一个。”[lex.charset]/3。“上述列表”是十进制数字字符
0 1 2 3 4 5 6 7 8 9
int v = buf[0] - '0';
cout << v;