关于unsinged char类型数据记录

ldxab 2013-03-15 08:24:46
我有一个很大的uchar类型数组,里面的char可能为范围内任何值,我想把它记录下来,现在我把它每个元素转化为数字%d格式来记录在文本txt中,每个元素用逗号隔开区别,例如%d,%d,%d,%d,%d,%d,%d...
但是这样耗费空间,例如假设大小为10,那么最大的记录可能为255,255,255,255.......这样每记录一个char类型的数据相当于多记录了一个逗号,同时有可能将一个char变为三个字节(255),请问有什么办法能够减少记录的字节数量同时又能区分每个char呢
我试过用write函数将所有数据一次性写到文件中但是这样虽然写的字节数最少,只有sizeof(数组)个字节,但是写入的文件很乱,而且可能有很多回车和空\0,显得文件很乱,请问有什么好的方法,既能保存下数据数据,又能使文件很整齐???
我记录下来目的是以后在另一个软件里读出来使用个数组的数据。只要能将记录的数据恢复出来即可,不在话什么格式和什么方法。
...全文
129 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
starytx 2013-03-17
  • 打赏
  • 举报
回复
直接fwrite往文件里写,读取时直接读取到一个uchar数组里,然后每四个字节一组放到int数组里不就完了,有啥纠结的,计算多少个也不用那么费劲,直接读取到的总大小除以4不就是你的记录数吗?至于你说的什么显得很乱、不整齐啥的,你的文件还要给人看吗?
baichi4141 2013-03-17
  • 打赏
  • 举报
回复
引用 2 楼 ldxab 的回复:
但是我需要在另一个软件里根据记录文件的行数来判断记录了多少条数据啊,如果数组里有很多的回车,就会产生判断错误
为啥你要根据行数来判断条数?每条数据大小固定的话直接用文件大小除以数据大小,每条数据大小不定的话在每条数据前加四字节int表示下一条数据长度 真心不明白为啥你眼中只有文本文件
乔巴好萌 2013-03-15
  • 打赏
  • 举报
回复
直接写文件就可以 前面的1楼已经说的很清楚了 uchar里面真正可读的数据很少,其他的都是不可读的二进制,用记事本打开根本不妥。比如你看到的换行和回车,对应的是二进制的0x0D和0x0A,也是uchar范围内的数据。 如果因为数据组织比较杂乱无章,可以考虑直接用xml写入 <xml>xxxx(你的数据部分)</xml> 或者在文件的起始位置写一个结构体,结构体里面可以记录每条记录的大小、起始位置等信息。 再不行,你就把二进制base64编码一下,转换成可读的字符,然后再写入。读的时候,再base64解码一下
ldxab 2013-03-15
  • 打赏
  • 举报
回复
但是我需要在另一个软件里根据记录文件的行数来判断记录了多少条数据啊,如果数组里有很多的回车,就会产生判断错误
baichi4141 2013-03-15
  • 打赏
  • 举报
回复
最简单最直接最正确的方法,就是直接fwrite 至于“有很多空格回车乱码等等”,解决方法很简单——不要用记事本打开非文本文件。

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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