从文件中截取一块(如:10K),如何保证最后一个字不被分割?然后计算出正常块的size. 用函数IsDBCSLeadByte()可以判断该字符是否为双字节字符的第一个字节。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 char buffer[10241];fread(buffer,10240);if(buffer[10239]>128) fread(buffer[10240],1);不知这样行不行,好久没有使用标准C语言了。 #include <stdio.h>#include <string.h>#define MAX_BUFFER (1024*10)int main(int argc, char* argv[]){ FILE *f; char szFileName[]="your filename.xxx"; f=fopen(szFileName,"r+"); if(NULL==f) { printf("Error to open file \"%s\"",szFileName); getchar(); return 0; } char sz[MAX_BUFFER+3]; char *p; int nSize=fread(sz,sizeof(char),MAX_BUFFER,f); if(nSize==MAX_BUFFER)//判断最后一个字符是否为多字节, { *p=sz[MAX_BUFFER-1]; int cb; while(0xf0==(char)(*p & 0xf0))//有些字符有二到三个字节组成 { p++; cb=fread(p,sizeof(char),1,f); if(cb==0) break; nSize++; } *p=0; } printf("Bytes Readed = %ld",nSize); fclose(f); getchar(); return 0;} 好象有点问题,*p = sz[MAX_BUFFER-1];这句前应该对P指针分配地址的,不分配好象不行,另外,不知道什么原因sz[MAX_BUFFER-1]值取不出来呀!另,0xf0应该是240,是表示什么意思? 我写错了,p=(char *)&sz[MAX_BUFFER-1];0XF0应改为0x80 哦,对!那好象while循环总是进不去呀! while循环可以进去(只要*p>128),但别用while循环了,(有错误)用下面的语句if(0x80==(char)(*p & 0x80)) { cb=fread(p,sizeof(char),1,f); if(cb!=0) nSize++;} 好象是if(*(char *)p&0x80){ ....}//以下是我新加入的fread(sz,sizeof(char),nSize,f);printf("/n/n");printf(sz);结果在前面一小段出现乱码,但最后的截断区是实现了正确截断,不出现乱码了,请问这是什么原因,你可以用个TXT文件测试一下吗?谢谢。 fread中不应传递sz, 否则新读入的字符读入了sz[0],前一小段有可能会出现乱码.用char *p=*sz[MAX_BUFFER]得到指向最后一个字符的指针,fread(p,sizeof(char),nSize,f);才能将新读入的字符放入正确的位置. 哦,谢谢!另外,下面的这个条件就是不能进入if(0x80==(char)(*p & 0x80)) { cb=fread(p,sizeof(char),1,f); if(cb!=0) nSize++;} 而这个if(*(char *)p&0x80){ ....}条件就每次都能实现。这是什么原因?还有,繁体字是不是可能存在由三个字符组成? 如何获得另一个对话框的按钮状态 [英雄帖]寻找熟悉志美CB3800控制系统软件集成的高手 VC++编程实现FTP服务器,不需要界面 如何自动重新下载图像 如何从注册表中提取16进制的数据 Visual C++.NET 的Managed C++为什么不能用STL?高手指教!!!! 高手请进,如何记录一个用户使用过哪些系统资源? 写帮助文档 寻求快速画点的方法。。希望大家给予帮助,谢谢! 同时10个上传文件,怎样把每个上传文件的进度值显示在主对话框的列表框中 ?:开发了一套《医药行业销售系统》,有没有人对这个有兴趣?? 有谁知道在netbios上使用winsock编程,一定送分,我只有这么多
fread(buffer,10240);
if(buffer[10239]>128)
fread(buffer[10240],1);
不知这样行不行,好久没有使用标准C语言了。
#include <stdio.h>#include <string.h>#define MAX_BUFFER (1024*10)
int main(int argc, char* argv[])
{
FILE *f;
char szFileName[]="your filename.xxx";
f=fopen(szFileName,"r+");
if(NULL==f) {
printf("Error to open file \"%s\"",szFileName);
getchar();
return 0;
}
char sz[MAX_BUFFER+3];
char *p;
int nSize=fread(sz,sizeof(char),MAX_BUFFER,f);
if(nSize==MAX_BUFFER)//判断最后一个字符是否为多字节,
{
*p=sz[MAX_BUFFER-1];
int cb;
while(0xf0==(char)(*p & 0xf0))//有些字符有二到三个字节组成
{
p++;
cb=fread(p,sizeof(char),1,f);
if(cb==0) break;
nSize++;
}
*p=0;
}
printf("Bytes Readed = %ld",nSize);
fclose(f);
getchar();
return 0;
}
另,0xf0应该是240,是表示什么意思?
p=(char *)&sz[MAX_BUFFER-1];
0XF0应改为0x80
用下面的语句
if(0x80==(char)(*p & 0x80))
{
cb=fread(p,sizeof(char),1,f);
if(cb!=0) nSize++;}
if(*(char *)p&0x80)
{
....
}//以下是我新加入的
fread(sz,sizeof(char),nSize,f);
printf("/n/n");
printf(sz);结果在前面一小段出现乱码,但最后的截断区是实现了正确截断,不出现乱码了,请问这是什么原因,你可以用个TXT文件测试一下吗?谢谢。
用char *p=*sz[MAX_BUFFER]得到指向最后一个字符的指针,
fread(p,sizeof(char),nSize,f);才能将新读入的字符放入正确的位置.
if(0x80==(char)(*p & 0x80))
{
cb=fread(p,sizeof(char),1,f);
if(cb!=0) nSize++;}
而这个
if(*(char *)p&0x80)
{
....
}
条件就每次都能实现。这是什么原因?还有,繁体字是不是可能存在由三个字符组成?