读书人

怎样理解这里的缓冲区,该怎么解决

发布时间: 2012-02-24 16:30:38 作者: rapoo

怎样理解这里的缓冲区
void Upbar(int y) /*光标上移函数*/
{
int i;
typedef struct texel_struct
{
unsigned char ch;
unsigned char attr;
}texel;
texel t;
for(i=9;i <=17;i++)
{
gettext(i,y,i,y,&t); /*为什么缓冲区是一个结构体,
而该结构体却声明的是unsigned char类型,
而不是字符数组?*/
t.attr=0x1f;
puttext(i,y,i,y+1,&t);
gettext(i,y+1,i,y+1,&t);
t.attr=0x4f; /*这里是用16进制表示,
那怎样去理解这个0x后面的内容?*/
puttext(i,y+1,i,y+1,&t);
}
gotoxy(3,y+1);
return;
}

第一个问题20分...解释清楚了给大家分.谢谢
}

[解决办法]
楼主这是用Turbol c 吧?

缓冲区就是一块内存区域,里面存放的内容可以是非结构的流数据,也可以是结构化数据。重点是由这么个内存区域,不管存放什么,都可以叫缓冲区。

10进制,就是逢10进1。
16进制,就是逢16进1。
0x1f = 1 * 16 + 15 = 31
0x2f = 2 * 16 + 15 = 47
0x3f = 3 * 16 + 15 = 63
0x4f = 4 * 16 + 15 = 79
...



[解决办法]
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制,一般用数字0到9和字母A到F
表示。 ... 其中最常用(或常见)表示十六进制数值的方式是将 '0x ' 加在数字前,或在数字
后加上小字16。例如0x2BAD 和2BAD16 都是表示十进制的11181
[解决办法]
将attr定义成unsigned char类型,可能是程序需要,也可能是用1个字节就可以描述这个变量,从t.attr=0x1f和t.attr=0x4f可以看出,很可能是头文件里有类似#define *** 0x1f,#define *** 0x4f的定义,而不是表示一个ASCII码(0x1f不是基本的ASCII码,0x4f对应大写字母“O”)。
至于缓冲区,只是一块分配的内存,一个结构体里的成员类型可以是多种不同的,这里只是恰好为两个unsigned char类型而已。无论其中有几个成员,都是对齐存入内存,当然也可以是字符数组等类型。
[解决办法]
gettext(i,y,i,y,&t); /*为什么缓冲区是一个结构体,
而该结构体却声明的是unsigned char类型,
而不是字符数组?*/
========================
缓冲是什么类型的,
关键看你的处理方式。

你希望他是数组,也可以:
unsigned char buf[2];
gettext(i,y,i,y,buf); //OK
然后后面你针对 buf[0]~t.ch buf[1]~t.attr 进行操作即可

读书人网 >C语言

热点推荐