2013-05-03 4 views
1

У меня есть «растровое изображение», скажем, 64 ширины. Значение 8 бит на байт. 0000 0000 и предположим, что я хочу активировать второй бит, 0100 0000.Изменение значения внутри массива бит

Я попытался создать массив без знака и использовать memcpy.

memcpy(bitmap[2], 1, sizeof(1)); 

Я даже попытался объявить 1 в переменной без знака.

unsigned char bit = 1; 
memcpy(bitmap[2], bit, sizeof(bit)); 

Я знаю, что зЬгср обыкновения решить что-либо в этом случае и тетср не решает его либо по-видимому, есть правильный способ сделать это точно. Я не эксперт по C, как вы можете видеть.

Возможно, я не должен пытаться изменить значение внутри массива следующим образом?

+0

'' растровое изображение ', скажем, 64 wide' - 64 * bits * wide? Итак, 8 байтов? Это один «длинный» или массив из 8 символов? – Mike

+0

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

ответ

1

давайте предположим, что ваш растровый выглядит, что

unsigned char bitmap[8] = {0}; 

и вы хотите, чтобы активировать второй бит (слева) первого байта в вашем bitmap массиве (bitmap[0]):

bitmap[0] = 1U<<6; 

bitmap[0] бинарное представление будет 0100 0000

EDIT

bitmap[i] размер 8 бит.

bitmap[0] = 1<<6; // means 1 shifted to the left with 6 steps 


            1<<0 
0 0 0 0 0 0 0 1 

          1<<1 
0 0 0 0 0 0 1 0 

         1<<2 
0 0 0 0 0 1 0 0 

        1<<3 
0 0 0 0 1 0 0 0 

...... 

    1<<6 
0 1 0 0 0 0 0 0 
+0

Не могли бы вы объяснить мне, как это работает, я не хочу просто бросать его на код, я тоже хочу его изучить. Я предполагаю, что он введет «1» шесть домов справа налево? –

+0

@DiogoAlexandre ответить обновлено – MOHAMED

+0

Спасибо:] Я дам ему попробовать мой код. –

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