2013-09-07 3 views
2

Скажем, у меня есть эти 8 бит символов:Omit ведущих 0 в полукокса и добавить

01111111 00011100 01101111 

Я хочу, чтобы опустить ведущий 0 и добавлять биты из полукокса до того, как так:

11111110 01110011 01111000 

* обратите внимание, что последний символ заполнен нулями.

Любые советы о том, как это сделать, будут высоко оценены. веселит.

ответ

3

Сдвиг первый символ до 1:

num[0] << 1; 

Это превратит 01111111 в 11111110. Теперь вам нужно ИЛИ LSB с MSB следующего символа. Для этого вам необходима смещенной копии следующего полукокса:

char copy = num[1] >> 7; 

Это превратило бы 01110011 в 00000000, так как высокий бит был 0. Теперь вы можете ИЛИ два:

num[0] |= num[1]; 

Что будет дайте вам то, что вы хотите.

Для этого необходимо выполнить цикл и увеличить сдвиги на каждой итерации до 8, а затем сбросить.

Обратите внимание, что, как указывает chux, вам лучше всего использовать неподписанные типы для таких вещей.

+0

Большое спасибо :) –

+0

@ goldilocks Отличное решение. Большое спасибо .. – Gangadhar

+2

Застраховать тип переменной не подписан еще иначе, вы, вероятно, получите неудовлетворительные результаты, если установлен самый старший бит. – chux

Смежные вопросы