值 247 的无符号字符超出范围?

Posted

技术标签:

【中文标题】值 247 的无符号字符超出范围?【英文标题】:Unsigned char out of bounds for value 247? 【发布时间】:2021-07-05 12:35:06 【问题描述】:

我正在尝试将值 247 转换为 C++ (Visual Studio) 中的字符。 我收到一个 Debug Assertion Failed 错误,说 unsigned(c+1) 应该小于或等于 256。我不明白这是从哪里来的,因为值 247 在那个范围内。

【问题讨论】:

当您对代码有任何疑问时,请在问题中包含该代码的minimal reproducible example 另外,这将取决于 /J 开关 - char 可以在 Visual Stduio 中签名或未签名。您使用/J 开关吗? (仅从示例中我们看不到) 我怀疑你的演员是导致断言的原因。 根据问题描述和提供的代码,我推测代码有bug。 247 在unsigned char 的范围内,而不是在char 的范围内。 【参考方案1】:

unsigned char 范围是 0 .. 255 char 范围是 -128 到 127

【讨论】:

这不对。 signed char 范围是 -128 到 127; char 范围是实现定义的。 (严格来说,即使这样也不正确:实现可以免费使用更大的范围。但没有人这样做。) 我们在这里查看 Visual Studio 中的 Microsoft C++ 编译器,在这种情况下,它使用单个八位字节(字节)作为字符,并且默认情况下会对其进行签名,除非使用编译器开关 /J . 那你应该在你的回答中说清楚。 为什么 - 当它提出问题时?

以上是关于值 247 的无符号字符超出范围?的主要内容,如果未能解决你的问题,请参考以下文章

检查最后一个索引号时索引超出范围怎么办?

Vigenere密码,如何处理超出字符值范围的序数值

对于char型的,如果超出范围怎样算?

尝试过滤转换后的日期时间值时超出范围的值

如果数组索引超出范围,则尝试抛出范围错误(C++)

循环向量不起作用::向量下标超出范围[重复]