VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 357|回复: 1

[已解决]_tcslen(lpFilePath) <= 3怎么理解?

[复制链接]
25_avatar_middle
最佳答案
0 
在线会员 发表于 2022-4-23 09:48:16 | 显示全部楼层 |阅读模式

//函数执行失败返回-1,否则返回文件大小
LONGLONG GetFileSizeExt(LPCTSTR lpFilePath)
{
    if (!lpFilePath || _tcslen(lpFilePath) <= 3) return -1;
    HANDLE hFile = CreateFile(lpFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE) return -1;
    LARGE_INTEGER fileSize = { 0 };
    BOOL bRet = GetFileSizeEx(hFile, &fileSize);
    CloseHandle(hFile);
    if (!bRet) return -1;
    return fileSize.QuadPart;
}
函数中的 _tcslen(lpFilePath) <= 3 怎么理解 ? 一个字符加\0也才两个为啥是三呀?
最佳答案
17_avatar_small
2022-4-23 11:01:25
本帖最后由 yoobaby 于 2022-4-23 11:08 编辑

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符

        UTF-8 without BOM   |   无
        UTF-8 with BOM      |   EF BB BF

盲猜,是在判断文件是否为空(无内容);小于等于3字节,文件就只有这个“头”,并没有实质的内容。注:这样应该只能判断UTF-8 with BOM编码保存的文件(windows 记事本保存为UTF-8 编码正是这种编码方式)。


下面内容复制自网上:

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。
如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

打开”记事本“新建一个文本文件,内容就是一个”严“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。
然后,用文本编辑软件UltraEdit中的”十六进制功能“,观察该文件的内部编码方式。
1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。
3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。




上一篇:本站内有数据结构与算法视频吗?
下一篇:MFC 断点
17_avatar_middle
最佳答案
40 
在线会员 发表于 2022-4-23 11:01:25 | 显示全部楼层    本楼为最佳答案   
bestAnswer
本帖最后由 yoobaby 于 2022-4-23 11:08 编辑

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符

        UTF-8 without BOM   |   无
        UTF-8 with BOM      |   EF BB BF

盲猜,是在判断文件是否为空(无内容);小于等于3字节,文件就只有这个“头”,并没有实质的内容。注:这样应该只能判断UTF-8 with BOM编码保存的文件(windows 记事本保存为UTF-8 编码正是这种编码方式)。


下面内容复制自网上:

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做”零宽度非换行空格“(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。
如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

打开”记事本“新建一个文本文件,内容就是一个”严“字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。
然后,用文本编辑软件UltraEdit中的”十六进制功能“,观察该文件的内部编码方式。
1)ANSI:文件的编码就是两个字节“D1 CF”,这正是“严”的GB2312编码,这也暗示GB2312是采用大头方式存储的。
2)Unicode:编码是四个字节“FF FE 25 4E”,其中“FF FE”表明是小头方式存储,真正的编码是4E25。
3)Unicode big endian:编码是四个字节“FE FF 4E 25”,其中“FE FF”表明是大头方式存储。
4)UTF-8:编码是六个字节“EF BB BF E4 B8 A5”,前三个字节“EF BB BF”表示这是UTF-8编码,后三个“E4B8A5”就是“严”的具体编码,它的存储顺序与编码顺序是一致的。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-6-4 22:29

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表