windows/linux跨平台C++项目注意事项

1.文件读写要用fopen,不要用fopen_s,因为linux不支持。

    参考:1.windows c/c++文件读写

               2.linux c/c++文件读写

2.类型定义要放在使用类型之前,C#可以把定义放在使用前后,但是c/c++只能放在使用类型之前,否则会报错,找不到这个定义。

3.c/c++枚举类型用法与C#用法区别

枚举类型定义

c/c++用法:

 

c#用法:

 

4.c/c++byte数组用法与C#用法区别

c#:byte[] test=new byte[]{0x01,0x02,0x03};

c/c++:

typedef unsigned char byte;

byte test[3]={0x01,0x02,0x03};

5.c/c++二进制文件读写方法fopen(),fread(),ftell()方法

需求:用fread()方法读取二进制文件

代码:

打开文件

bool cbinaryfile::open(const char* filename, fileopenmode openmode)
{
	mode = openmode;
	char* opm;
	switch (openmode)
	{
	case readonly:opm = "r";
		break;
	case readandwrite:opm = "r+";
		break;
	case writeonly:opm = "w";
		break;
	}
	file = fopen(filename, opm);
	if (file == NULL)return false;
	else return true;
}

读取文件内容 

bool cbinaryfile::read(BYTE* buffer, int length)
{
	if (file == NULL)return false;
	size_t result = fread(buffer, sizeof(BYTE), length, file);
	if (result < length)return false;
	return true;
}

获取当前文件读取的位置 

long cbinaryfile::getcurrentpos()
{
	if (file == NULL)return 0;
	return ftell(file);
}

方法调用

bool ydsqfilelibgcd::readhead()
{
	BYTE buf[8];
	if (!file.read(buf, 8)) return false;
	packstartpos = file.getcurrentpos();

	BYTE buf_time[8];
	if (!file.read(buf_time, 8)) return false;
	packstartpos = file.getcurrentpos();

	BYTE buf_count[216];
	if (!file.read(buf_count, 216))return false;
	packstartpos = file.getcurrentpos();

	return true;
}

输出结果:

错误原因:fopen()的打开方式用了“r”,实际上如果要以二进制读取文件的话需要用“rb” 。

解决方法:fopen()函数改为

bool cbinaryfile::open(const char* filename, fileopenmode openmode)
{
	mode = openmode;
	char* opm;
	switch (openmode)
	{
	case readonly:opm = "rb";
		break;
	case readandwrite:opm = "rb+";
		break;
	case writeonly:opm = "wb";
		break;
	}
	file = fopen(filename, opm);
	if (file == NULL)return false;
	else return true;
}

改完以后输出结果:

 扩展关于fopen()函数相关的内容:(以下图片来自:C 库函数 – fread() | 菜鸟教程 (runoob.com)C 文件读写 | 菜鸟教程 (runoob.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值