在 std::stoi 比较字节 0x90 上发现错误

Posted

技术标签:

【中文标题】在 std::stoi 比较字节 0x90 上发现错误【英文标题】:Error Found on std::stoi comparison byte 0x90 【发布时间】:2020-07-20 01:35:19 【问题描述】:

我在 C++ 上使用已编译的 MSVC 进行编码并注意到一些事情:

当我写一些类似的东西时:

if ( std::stoi ( "4D", nullptr, 16 ) == '\x4D' )
                Beep ( 200, 400 );

我可以听到哔哔声,但是当我写下类似的内容时:

if ( std::stoi ( "90", nullptr, 16 ) == '\x90' )
            Beep ( 200, 400 );

比较不会激活哔声。

我搜索了很多地方,但没有找到任何解决此问题的方法。

【问题讨论】:

char 已签名。 '\x90' 转换为某个负整数,而不是 0x90。为什么你觉得有必要在右侧使用char 字面量? @IgorTandetnik char 可以签名,也可以不签名。它是实现定义的。 【参考方案1】:

stoi() 返回 int,而不是 char。用0x4D代替'\x4D',用0x90代替'\x90'

if ( std::stoi ( "4D", nullptr, 16 ) == 0x4D )
    Beep ( 200, 400 );
if ( std::stoi ( "90", nullptr, 16 ) == 0x90 )
    Beep ( 200, 400 );

【讨论】:

以上是关于在 std::stoi 比较字节 0x90 上发现错误的主要内容,如果未能解决你的问题,请参考以下文章

std::atoi() 和 std::stoi 有啥区别?

如何在 C++ 中使用 std::stoi() 验证 int 输入?

C++ 困境:关于 std::stoi

std::stoi 的基本参数

如何在C ++中使用std :: stoi将c字符串转换为整数

std::stoi 的问题,不适用于 MinGW GCC 4.7.2