2012-12-12 2 views
0

Сэр У меня проблема. Я нахожу двоичный код отрицательного числа, который дает мне 32 бит. Я обрезаю все остальные биты, кроме первых 8 бит. Теперь я меняю LSB. Это дает мне 125 ответов. Я должен вставить это в изображение с серой шкалой. Согласно моему требованию, я должен добавить это значение 125 в среднем (сумма четырех соседних пикселей). Когда я добавлю это к значению. Я даю ответ, который превышает 255. Так что это возможно после модификации lsb. мой бит остается отрицательным.Отрицательный номер двоичный и изменение LSB его

вот мой код

string str1 = Convert.ToString(d[1, 1], 2); 
str1 = str1.Substring(Math.Max(str1.Length - 8, 0)).PadLeft(8, '0'); 
char[] data = new char[str1.Length]; 

for (int m = 0; m < str1.Length; m++) 
{ 
    data[m] = str1[m]; 
} 

//data[0] = '0'; 
string s=""; 
data[0] = '0'; 

for (int m = 0; m < str1.Length; m++) 
{ 
    s += data[m]; 
} 

byte output = Convert.ToByte(s, 2); 
+4

Двоичные операции с использованием 'Convert.ToString (..., 2);' заставьте меня вздохнуть. –

ответ

0

Ваш код урезает все, кроме последних 8 бит. Если вы хотите обрезать все, кроме , первые 8 бит, вы должны использовать str1.Substring (0, 8). И вы меняете MSB на последние 8 бит. если вы хотите изменить LSB, вы должны использовать данные [7] вместо данных [0].

+0

О, спасибо .. Я сделал ужасную ошибку. Спасибо, что напомнили мне. – Ehsan

+0

@ Ehsan Я должен согласиться с комментарием, однако, это очень неэффективный способ выполнения побитовых операций. Если вы хотите очистить младший бит числа, гораздо быстрее использовать 'd [1,1] &= ~1'; – BlueMonkMN

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