请问 L "你好" 是什么意思啊?

idAnts 2001-07-04 08:13:52
如题
...全文
367 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
leky2000 2001-07-05
  • 打赏
  • 举报
回复
回复人:xlqin() (2001-7-5 9:36:47) 得0分
L"X"告诉编译器,后面的字符串按UNICODE模式处理,如果为了通用,可能用宏_T("X"),_T("X")可能由你的编译模式将字符串转成ANSI串还是UNICODE串,也就是
#ifdef _UNICODE
#define _T(x) L ## x
#else
#define _T(x) "x"
#endif



 回复人:plato(天天) (2001-7-5 9:46:44) 得0分
这个理解有误:

>我的问题是:操作系统如何判断一个应用程序所采用的字符编码是否UNICODE呢,
>是程序编译阶段把相应的编码信息保存起来了吗?

实际上系统提供了两套函数:
比如MessageBoxA和MessageBoxW,前者的参数是mbcs的,后者是unicode,MessageBoxA当然不能处理Unicode,MessageBoxW不能处理mbcs。
而你用的MessageBox是一个宏,根据_UNICODE的编译选象选择调用MessageBoxA或者MessageBoxW。

所以不存在系统判断你的字符传是否unicode的问题。而是编译器根据_UNICODE的参数来生成调用MessaegBoxA或者MessageBoxW之一,明白了?

太对了!!!!!!!!!!!!!
mywave 2001-07-05
  • 打赏
  • 举报
回复
L是告诉complier,后面为双字节字符
WhiteWaterBlueSky 2001-07-05
  • 打赏
  • 举报
回复
关注
plato 2001-07-05
  • 打赏
  • 举报
回复
这个理解有误:

>我的问题是:操作系统如何判断一个应用程序所采用的字符编码是否UNICODE呢,
>是程序编译阶段把相应的编码信息保存起来了吗?

实际上系统提供了两套函数:
比如MessageBoxA和MessageBoxW,前者的参数是mbcs的,后者是unicode,MessageBoxA当然不能处理Unicode,MessageBoxW不能处理mbcs。
而你用的MessageBox是一个宏,根据_UNICODE的编译选象选择调用MessageBoxA或者MessageBoxW。

所以不存在系统判断你的字符传是否unicode的问题。而是编译器根据_UNICODE的参数来生成调用MessaegBoxA或者MessageBoxW之一,明白了?
xlqin 2001-07-05
  • 打赏
  • 举报
回复
L"X"告诉编译器,后面的字符串按UNICODE模式处理,如果为了通用,可能用宏_T("X"),_T("X")可能由你的编译模式将字符串转成ANSI串还是UNICODE串,也就是
#ifdef _UNICODE
#define _T(x) L ## x
#else
#define _T(x) "x"
#endif


GolemZ 2001-07-05
  • 打赏
  • 举报
回复
又长见识了
Swell 2001-07-04
  • 打赏
  • 举报
回复
Agree to zcpro,
1)使用L修饰字符串,对应的字符在存储时是按照Unicode编码保存的。
我的问题是:如果在编译时指定_UNICODE(代替默认的_MBCS设置),
但并没有指定L来修饰字符串,效果又如何呢?

2)"不过Unicode的程序只能在nt/2000下运行"
我知道NT的底层是建立在UNICODE基础上的(而95,98则是建立在多字符编码(DBCS==MBCS?)如果一个应用程序不是用UNICODE编码,系统在处理字符有关
的工作时,需要首先把对应的字符编码从mbcs->unicode(是按照当前的系统设置
如:简体中文来完成这一映射关系吧?),然后进行实际的处理工作,完成后再从
unicode->mbcs,得到最终的结果。
我的问题是:操作系统如何判断一个应用程序所采用的字符编码是否UNICODE呢,
是程序编译阶段把相应的编码信息保存起来了吗?
一个应用程序在处理字符显示的时候,所使用的代码页又是在哪一阶段(编译。运行)
如何确定的呢?
希望大家能够把idAnts网友提出的问题深入下去。
不解 2001-07-04
  • 打赏
  • 举报
回复
L""告诉编译器,后面的字符串按UNICODE模式处理(见<windows核心编程>有祥解.)

wjyasd 2001-07-04
  • 打赏
  • 举报
回复
Chice_wxg(Chice)是对的吧! 我和他想的一样! ^&^
afc 2001-07-04
  • 打赏
  • 举报
回复
zcpro(大饼)说的对,字符串前面加L代表UINCODE字符串,编译器自动转换!
Chice_wxg 2001-07-04
  • 打赏
  • 举报
回复

L表示把下面的字符串看做长整型看待,也相当于转换成 char *

还有常见写法: long i=0L;
idAnts 2001-07-04
  • 打赏
  • 举报
回复
哦,这么回事啊,那是不是说那个程序即使编译了,98下也无法运行?
idAnts 2001-07-04
  • 打赏
  • 举报
回复
没敲错啊,原来就是这么写的。
如果把L去掉,编译的时候就会说“cannot convert parameter 1 from 'char [5]' to 'const unsigned short *'”
zcpro 2001-07-04
  • 打赏
  • 举报
回复
L"你好"指的是将"你好"这个字符串转换成Unicode的(双字节字符串),CString是支持Unicode的,你可以直接替换,编译器会帮你自动转换的。
不过Unicode的程序只能在nt/2000下运行。
GolemZ 2001-07-04
  • 打赏
  • 举报
回复
L"你好",C/C++没有这样的语法,敲错了吧?!
GolemZ 2001-07-04
  • 打赏
  • 举报
回复
那就把CString 转换成字符串呗,用 (LPCSTR)s 就可以了
idAnts 2001-07-04
  • 打赏
  • 举报
回复
倒过来,是我想把CString传进去,原来那里是这样的 L"你好"
GolemZ 2001-07-04
  • 打赏
  • 举报
回复
"你好"是一个字符串常量。
我猜你的意思是:
有一个函数例如View(CString s,...,...);
这样调用View("你好",...,....);
对吧?这样调用是正确的。
idAnts 2001-07-04
  • 打赏
  • 举报
回复
就是在一个函数的参数是这样(L"你好",.... ,...)的字样。
现在有一个变量是CString,想从那里传过去,不知道怎么办了,那句话是什么意思我都不知道。
wjyasd 2001-07-04
  • 打赏
  • 举报
回复
??? 我不明白你的意思? @_@
加载更多回复(1)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧