![](/img/trans.png)
[英]Iterating through const unsigned char * containing “Extended ASCII” characters
[英]How To Print ASCII Extended Characters Using a Const Char*?
我有一个在屏幕上打印字符的功能,如下所示:
void print(int colour, int y, int x, const char *string)
{
volatile char *video=(volatile char*)0xB8000 + y*160 + x*2;
while(*string != 0)
{
*video=*string;
string++;
video++;
*video=colour;
video++;
}
}
我想将字符254打印为十进制 ,但是我需要使用存储在const char*
上的const char*
。 我无法尝试print(0x0F, 0, 0, 0xFE);
,因为这会引发指针错误而不进行强制转换,那么该怎么办呢?
这是题外话,它的记忆,但是在挖掘代码时,我发现了这一点:
/* Global Variables */ static Word far *ScrPtr; /* Local Variables */ static Word VidSeg; ... int WinScreenHeight(void) { return (*(unsigned char far *) 0x484) + 1; } int WinScreenWidth(void) { return (*(unsigned int far *) 0x44A); } void WinInit(){ SetMode(AdapterType()); ScrPtr = (Word far *) CreateFarPtr(VidSeg, 0x0000); } static void SetMode(int VideoAddress) { switch(VideoAddress) { case VGA : case MCGA: case EGA : case CGA : (Word) VidSeg = 0xB800; break; case MDA : (Word) VidSeg = 0xB000; break; case '?' : fprintf(stderr, "Sorry Unknown Video Adapter.\n"); fprintf(stderr, "This program requires C/E/MC/VGA, Mono Adapter\n"); exit(1); } } static int AdapterType(void) { char far *VidMode; char blreg, alreg; VidMode = (char far *) 0x00000449L; asm mov ax, 0x1a00; asm push bp; asm int 0x10; asm pop bp; asm mov blreg, bl; asm mov alreg, al; if (alreg == 0x1a && blreg >= 9) return(MCGA); if (alreg == 0x1a && blreg >= 7 && blreg <= 9) return(VGA); if (blreg == 4 || blreg == 5) return(EGA); if (*VidMode == 3) return(CGA); if (*VidMode == 7) return(MDA); return('?'); }
希望这对您有所帮助,汤姆,谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.