Приведенный ниже код работает сначала два раза, а затем в третий раз происходит сбой преобразования в ulong и дает мне 0XCF вместо 0xF3. Есть идеи, в чем проблема? Похоже, ошибка в VS 2010 to_long. двоичный файл ‘11110011’ должен быть преобразован в Hex F3! Вот результаты при запуске отладки под VS 2010.
1-е ВРЕМЯ bc_bit_char b’11000011 ‘преобразуется в k = x’000000c3’; ВТОРОЕ ВРЕМЯ: bc_bit_char b’00111100 ‘преобразуется в k = x’0000003c’ 3-е ВРЕМЯ: bc_bit_char b’11110011 ‘преобразуется в k = x’000000cf’ НЕПРАВИЛЬНО! s / b x’000000f3 ‘
std::bitset<8> bc_bit_char (00000000);
unsigned char bc_char=' ', bc_convert_char=' ';
unsigned long k=0, bc_rows=0;
k = bc_bit_char.to_ulong(); // convert 8 bits to long integer with same bits
bc_convert_char = static_cast<unsigned char> (k); // convert long integer to unsigned
Существует путаница относительно того, какой бит является наиболее значимым, а какой — наименее значимым. В предоставляемых вами двоичных константах крайний левый бит — это бит 0, который является наименее значимым. В шестнадцатеричном значении, предоставленном to_long
самый левый бит — это бит 7, который является наиболее значимым. Если вы поменяете местами одно или другое, они будут равны.
Других решений пока нет …