在 C 中打印位图
Printing bitmap in C
我正在尝试创建 100 个 1 和 0 的位图。
以下是我目前得出的结果。我在打印位图时遇到问题或者我不知道如何打印位图。
我想显示由我设置的所有 1 和 0 组成的位图。对于索引 0 到 99
int main()
{
unsigned int bit_position, setOrUnsetBit, ch;
unsigned char bit_Map_array_index, shift_index;
unsigned char bit_map[100] = { 0 };
do
{
printf("Enter the Bit position (bit starts from 1 and Ends at 100) \n");
scanf("%d", &bit_position);
printf(" Do you want to set/unset the Bit (1 or 0) \n");
scanf("%d", &setOrUnsetBit);
bit_Map_array_index = (bit_position - 1) / 8;
shift_index = (bit_position - 1) % 8;
printf("The bit_position : %d shift Index : %d\n", bit_position, shift_index);
if (setOrUnsetBit)
{
bit_map[bit_Map_array_index] |= 1 << shift_index; //set 1
}
else
{
bit_map[bit_Map_array_index] &= ~(1 << shift_index); //set 0
}
printf(" Do You want to Continue then Enter any Number"
"and for Exit then enter 100\n");
scanf("%d", &ch);
} while (ch != 100);
//I wan to print bitmap here after exiting
system("pause");
return 0;
}
我在C编程方面的经验很少...所以如果我错了请指正我。
提前致谢。
您使用的是字节,而不是位。你有 100 个字节,将每个字节设置为 0 或 1。不需要移位值:
unsigned char bytes[100];
for(int i = 0; i < sizeof(bytes); i++)
bytes[i] = rand() % 2;
for(int y = 0; y < 10; y++)
{
for(int x = 0; x < 10; x++)
{
int i = y * 10 + x;
printf("%d ", bytes[i]);
}
printf("\n");
}
如果你正在使用位,那么你可以使用
unsigned char data[13];
因为13
是13 * 8
位,或者104
位。您只需要 100
位。如何设置和获取位取决于您选择的格式。例如,一个位图文件被填充,因此每一行都是 4 字节的倍数。一般来说,您可以将值设置为:
if(bytes[i])
data[byteindex] |= (1 << shift);
else
data[byteindex] &= ~(1 << shift);
取回值:
int value = (data[byte] & shift) > 0;
我正在尝试创建 100 个 1 和 0 的位图。
以下是我目前得出的结果。我在打印位图时遇到问题或者我不知道如何打印位图。
我想显示由我设置的所有 1 和 0 组成的位图。对于索引 0 到 99
int main()
{
unsigned int bit_position, setOrUnsetBit, ch;
unsigned char bit_Map_array_index, shift_index;
unsigned char bit_map[100] = { 0 };
do
{
printf("Enter the Bit position (bit starts from 1 and Ends at 100) \n");
scanf("%d", &bit_position);
printf(" Do you want to set/unset the Bit (1 or 0) \n");
scanf("%d", &setOrUnsetBit);
bit_Map_array_index = (bit_position - 1) / 8;
shift_index = (bit_position - 1) % 8;
printf("The bit_position : %d shift Index : %d\n", bit_position, shift_index);
if (setOrUnsetBit)
{
bit_map[bit_Map_array_index] |= 1 << shift_index; //set 1
}
else
{
bit_map[bit_Map_array_index] &= ~(1 << shift_index); //set 0
}
printf(" Do You want to Continue then Enter any Number"
"and for Exit then enter 100\n");
scanf("%d", &ch);
} while (ch != 100);
//I wan to print bitmap here after exiting
system("pause");
return 0;
}
我在C编程方面的经验很少...所以如果我错了请指正我。
提前致谢。
您使用的是字节,而不是位。你有 100 个字节,将每个字节设置为 0 或 1。不需要移位值:
unsigned char bytes[100];
for(int i = 0; i < sizeof(bytes); i++)
bytes[i] = rand() % 2;
for(int y = 0; y < 10; y++)
{
for(int x = 0; x < 10; x++)
{
int i = y * 10 + x;
printf("%d ", bytes[i]);
}
printf("\n");
}
如果你正在使用位,那么你可以使用
unsigned char data[13];
因为13
是13 * 8
位,或者104
位。您只需要 100
位。如何设置和获取位取决于您选择的格式。例如,一个位图文件被填充,因此每一行都是 4 字节的倍数。一般来说,您可以将值设置为:
if(bytes[i])
data[byteindex] |= (1 << shift);
else
data[byteindex] &= ~(1 << shift);
取回值:
int value = (data[byte] & shift) > 0;