值 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 的无符号字符超出范围?的主要内容,如果未能解决你的问题,请参考以下文章