在 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 上发现错误的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中使用 std::stoi() 验证 int 输入?