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

Roy*_*son -1 c++ string c++17

我正在通过网络发送一条消息,其中包含以下简单代码:

SSL_write(ssl, argv[1], strlen(argv[1]));
Run Code Online (Sandbox Code Playgroud)

然后,我接收服务器上的消息并将消息的第一个字符转换为int,具有以下代码:

char buf[1024] = {0};
SSL_read(ssl, buf, sizeof(buf));
std::cout << atoi(&buf[0]);
Run Code Online (Sandbox Code Playgroud)

此代码工作得相当好,因为如果字符串类似于"1foo",服务器将打印出"1"到控制台.但是,如果字符串是"12foo",则服务器将打印出"12"而不是"1".

我该如何解决这个问题,所以服务器只打印出字符串的第一个字符(作为int)?

Ser*_*eyA 7

最简单的方法是(假设您正在使用ASCII编码):

int v = buf[0] - '0';
cout << v;
Run Code Online (Sandbox Code Playgroud)

  • 这种转换不依赖于ASCII.C和C++都要求字符"0","9"的编码是连续的并且在增加.这意味着`buf [0] - '0'`适用于每个字符编码. (2认同)