Я определил экран с структурой, как показано ниже:Что случилось с определением этой структуры?
struct
{
private:
//data and attributes
char character : 8;
unsigned short int foreground : 3;
unsigned short int intensity : 1;
unsigned short int background : 3;
unsigned short int blink : 1;
public:
unsigned short int row;
unsigned short int col;
//a function which gets row, column, data and attributes then sets that pixel of the screen in text mode view with the data given
void setData (unsigned short int arg_row,
unsigned short int arg_col,
char arg_character,
unsigned short int arg_foreground,
unsigned short int arg_itensity,
unsigned short int arg_background,
unsigned short int arg_blink)
{
//a pointer which points to the first block of the screen in text mode view
int far *SCREEN = (int far *) 0xB8000000;
row = arg_row;
col = arg_col;
character = arg_character;
foreground = arg_foreground;
intensity = arg_itensity;
background = arg_background;
blink = arg_blink;
*(SCREEN + row * 80 + col) = (blink *32768) + (background * 4096) + (intensity * 2048) + (foreground * 256) + character;
}
} SCREEN;
, но когда я использую символы с более чем «128» кодом ASCII в использовании этой структуры, данные будут разбились. Я определил поле символов с 8 бит. так что случилось с этим определением?
ОК. принимая мою ошибку. это не важно. что не так с кодом? –
Почему вы используете бит-поле на вашем 'char'? Я этого не понимаю. Я также не могу понять значение «данные будут разбиты». Что это значит? –
проблема решена. Мне пришлось использовать unsigned. Я имел в виду, что данные будут ошибочными. это было поле знакового бита. –