Windows NT从底层支援Unicode的意思是Unicode是机内码么?
首先感谢大家在百忙之余能看我的帖子!祝各位新年快乐!!
问题一:
刚刚看《windows程序设计》里面有一句原话如下:
“Windows NT从底层支援Unicode。这意味着Windows NT内部使用由16位字符组成的字符串。因为世界上其它许多地方还不使用16位字符串,所以Windows NT必须经常将字符串在操作系统内转换。Windows NT可执行为ASCII、Unicode或者ASCII和Unicode混合编写的程序。即,Windows NT支持不同的API函数呼叫,这些函数接受8位或16位的字符串(我们将马上看到这是如何动作的。)……”
这是不是意味着Unicode是Windows NT系统的机内码?
问题二:
我的电脑用的是Win7操作系统,有没有什么命令能够直接查询我操作系统使用的机内码?
[解决办法]
机内码有二个概念:
1、Machine Code,又称为Machine Language,即cpu能执行的机器指令,所有编程语言必须转换为Machine Code才能被cpu执行。详细含义可参考http://www.linfo.org/machine_code.html
2、汉字机内码,又称“汉字ASCII码”,简称“内码”,指计算机内部存储,处理加工和传输汉字时所用的由0和1符号组成的代码。大部分汉字系统都采用将国标码每个字节高位置1作为汉字机内码。
楼主看《windows程序设计》的那段话,引出机内码的概念,不知道是指上面哪一种。
[解决办法]
对irql的要求是因为缓冲区可能被交换出去,和字符串编码没关系
你可能被机内码这个名字忽悠了
机内码和windows7没什么关系,机内码就是一种用于存储汉字编码,如果不用中文windows7根本用不着机内码
unicode和机内码不一样
[解决办法]
windows分为用户态和内核态,内核态即为你所说的内部。
用户态包括:第三方应用程序,windows子系统。
内核态:windows内核组件,内核驱动。
当用户态程序需要使用系统功能得时候,会通过2E中断(win2k)或者sysiner指令(xp之后)进入到内核态。比如:API函数WriteFile用于写文件,这个函数,在ntdll.dll中,将参数和功能码压栈,然后sysiner进入内核模式,内核程序根据ssdt查找相应功能码,然后处理。这其实就进入了内核态。
windows API即是应用程序接口,用户态接口。例如:ReadFile,这个函数既支持unicode又支持ansi。
但是这个函数在从用户态转换到内核态的时候,会把ansi字符串转换成unicode字符串。
意思就是说,windows内核是基于UNICODE的。所有用户态调用,进入内核态之后,ansi字符串参数都会被转换成unicode字符串。
只要做过内核开发的,都会明白这一点。
希望我说的对你有帮助。
[解决办法]