比较 C++ 中的uint8_t和uint16_t
Compare uint8_t and uint16_t in c++
我想测试输入变量的值是否传递了一个字节大小或知道,所以我写了这段代码
{
uint8_t x;
cout << " enter x" << endl;
cin >> hex >> x;
cout << hex << x;
uint8_t y ;
y = x >> 4 ;
cout << hex << y;
if ( y == 0 )
{
cout << " succes, coorect value for x";
}
if (y > 0)
{
/*here i supoosed that x = 0xfff and when shifting, y would be 0xff but y is uint8 so it's just for compare
std::cout << "fail, ";
}
return 0;
}
我想知道如何测试用户是否在 uint8 中键入两个或多个字节。 并告诉他只输入一个字节的值。这就是为什么我试图将uint8_t与uint16_t进行比较。
上述代码的问题在于您正在测试unsigned integer
中的negative
值。if(y < 0)
部分将始终是假的。
现在,根据我的理解,您要过滤大于1Byte
的值。您知道,对于给定byte
,您有2^8 - 1
值范围,也就是说,无符号数字位于范围内[0-255]
.因此,您的问题被简化为一个简单的检查,即if the input value is greater than 255, throw away that input
.(Ofc 您必须检查< 0
值(
还有其他解决方案,但没有任何上下文,我无法提供准确的答案。希望上述简化对您有所帮助。
为了检查值是否在小类型的范围内,必须先将其分配给较大的类型。您根本无法对小类型本身进行检查,因为它永远不能包含要检查的太大值。
uint16_t tempX;
uint8_t x;
cin >> hex >> tempX;
if (tempX > 0xff)
cout << "error";
else
x = (uint8_t)tempX;
相关文章:
- 从值小于256的uint16到uint8的Endian安全转换
- 你能把一个向量<int64>投射到一个向量<uint8>吗
- SSCANF 进入 uint8 阵列失败
- 着色器将uint8投射到float,并将其重新解释回uint
- 将指针uint8覆盖到指针uint16
- 创建一个包含30亿个uint8元素的向量
- 将 Uint8(浮点AUDIO_F32)转换为int16_t(16 位 PCM)
- UINT8/16 /32/etc 和 INT8/16/32/etc 在 libtiff 中不起作用?
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 将具有不同字段的结构转换为 uint8 的数组
- 从 uint16 指针创建垫子
- 将 uint16 转换为 WMI Variant for CreateSnapshot 方法
- uint32, int16, uint8 .为什么这些常用的数据类型没有进入标准
- 将字符 * 转换为 uint16 和 uint32
- 如何将 uint8 列表转换为其相应的有符号值
- 兼容的声明 __attribute__ ((节( ".abc.dfe" ))) 常量易失性 uint8 属性变量 = 0;- 符合MISRA标准
- 如何将UINT8*施放到UINT32
- 如何将元素从 Swift 中的 [UnsafeMutablePointer<UInt8>] 转换为 C++ 中的 UInt8 *
- 带有 uint8 和 uint16 的十六进制<<的行为
- uint8、uint16等的用法