布尔数组从位掩码返回不正确的值
Boolean array returning incorrect values from bitmask?
我编写了一个函数,它将一个字节解构为8位,并将这些位作为布尔值存储到布尔数组中。然而,布尔数组产生的是随机值,这让我很困惑,因为布尔值只能保存TRUE和FALSE。
// DeconByte :: Deconstructs a byte into a series of bits.
bool* DeconByte( ubyte Value ) {
bool Bools[ 8 ];
for( int i = 0; i < 8; i ++ ) {
Bools[ i ] = ( ( Value >> ( 7 - i ) ) & 1 ) > 0;
}
return Bools;
}
如果你传递一个值255,那么结果应该是一个包含8个TRUE布尔值的数组。然而,奇怪的部分是,我的函数不仅不返回布尔值,而且每次在不改变字节输入的情况下返回不同的值。
到底出了什么问题?
根据答案,我修复了这个问题:
// DeconByte :: Deconstructs a byte into a series of bits.
bool* DeconByte( ubyte Value ) {
bool Bools = new bool[ 8 ];
for( int i = 0; i < 8; i ++ ) {
Bools[ i ] = ( ( Value >> i ) & 1 ) > 0;
}
return Bools;
}
// Testing:
bool* Bits = DeconByte( 255 );
返回指向局部变量的指针,该指针在退出函数后通常会被销毁。所以程序有未定义的行为。
按以下方式定义函数
std::array<bool, 8> DeconByte( ubyte Value )
{
std::array<bool, 8> Bools;
for( int i = 0; i < 8; i ++ ) {
Bools[ i ] = ( ( Value >> i ) & 1 ) > 0;
}
return Bools;
}
相关文章:
- 在C++中返回不正确的楼层函数值
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- wcslen() 在使用编译指示包时返回不正确的结果
- 乘法返回我的值不正确
- 为什么代码不能返回正确的值?
- 派生类继承的 getter,找不到返回正确值的方法
- 返回类型不正确
- 当我输入分数值时,它返回不正确的结果
- ifstream::read 不断返回不正确的值
- Strftime在iOS上返回一周中不正确的一天
- C++ 中的 MD5 实现返回不正确的摘要
- AccessibleObjectFromPoint() 返回一个不正确的对象
- C 程序不会返回正确的阶乘值
- C 从文件中读取FSTREAM数据不会返回正确的值.inputfile.tellg返回-1
- MSVC OSVersion 返回不正确的版本
- C++ GetModule文件名不会返回正确的字符串
- 'SystemParametersInfo'函数在获取桌面壁纸时返回不正确的值
- 创建 CTime @ 2am 不会返回正确的值(Windows CE,C++)
- c++winsock-recv()返回不正确且奇怪的缓冲区
- Winsock recv() 返回不正确的数据