社区
图形处理/算法
帖子详情
一个编码储存的问题,急!!高分相送,谢谢
gatesxie
2004-01-08 11:57:38
对一个矩阵编码,编码后,例如:A=10001111,B=1010011,........
A的数据类型为CString,
如何把A,B,.....这些字符串转化成按位存储,也就是说把A,B.....存到硬盘中,按位进行存储,而不是按字符.
最好给出代码,小弟先谢谢大家了
...全文
40
10
打赏
收藏
一个编码储存的问题,急!!高分相送,谢谢
对一个矩阵编码,编码后,例如:A=10001111,B=1010011,........ A的数据类型为CString, 如何把A,B,.....这些字符串转化成按位存储,也就是说把A,B.....存到硬盘中,按位进行存储,而不是按字符. 最好给出代码,小弟先谢谢大家了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chehw
2004-01-09
打赏
举报
回复
(二)读取时采用以下算法:
...
(2)若cb>=0,则该字节本身即为编码。令val[0]=cb; cb=0; 执行(5)
chehw
2004-01-09
打赏
举报
回复
如果你的编码长度小于128个字节,可考虑如下存储方案:
在每个编码前附加1个或0个字节,附加字节的最高位置为1
(一)写入时采用下面的算法:
1、当编码为1个字节时:
(1)若最高位为0,则无需添加附加字节, 直接写入编码。
(2)若最高位为1,则: 附加字节=10000000|1;先写入附加字节,再写入编码。
2、当编码为n个字节时(128>n>1),附加字节=10000000|n; 先写入附加字节,再写入编码。
(二)读取时采用以下算法:
分配一个char型的数组 char val[128];//读取编码
分配一个char型的变量 char cb;//读取附加字节
(1)从文件读一个字节到cb;
(2)若cb>=0,则该字节本身即为编码。令val[0]=cb; 执行(5)
(3)若cb==-1,则后面的编码长度为1个字节,且高位为1。令cb=1, 读取一个字节至val[0], 令val[0]=-val[0]; 执行(5)
(4)若cb<-1, 则cb=-cb, 读取cb个字符到val, 执行(5)
(5) 转换val[0]至val[cb-1]个编码为字符串形式,若!EOF则重复执行(1),否则结束。
zhangcrony
2004-01-09
打赏
举报
回复
掉個字﹐好象我沒必要再說什么了吧?
zhangcrony
2004-01-09
打赏
举报
回复
好象我必要再說什么了吧?
nonocast
2004-01-09
打赏
举报
回复
够详细的了
May you succeed!
gatesxie
2004-01-09
打赏
举报
回复
谢谢chehw和花差花差 ,现在的问题是我的编码有可能是不定长的,如果这样的话我如何实现从硬盘中读取并转换,我的想法是建一个标志位,标志下次要读入多少个字节,可是这样的话,又要占用大量多余的储存空间
gatesxie
2004-01-08
打赏
举报
回复
谢谢,那存成文件后的解码呢!!!
fzd999
2004-01-08
打赏
举报
回复
先把CString转成字符串
int nLen = strA.GetLength() + 1;
char *Buf = new char[nLen];
memcpy(Buf, strA.GetBuffer(nLen);
然后遍历并存储
int nNumByte = (0 == ((nLen - 1)%8) ? nlen/8 : nLen/8 + 1);
BYTE *ByteBuf = new char[nNumByte];
ZeroMemory(ByteBuf, nNumByte);
BYTE bTmp = 0x01;
for (int i = 0; i < nNumByte; i++)
{
for (int j = 0; j < 8; j++)
{
if (Buf[i*8 + j] == '\0')
{
break;
}
if (Buf[i*8 + j] == '1')
{
ByteBuf[i] |= bTmp<<j;
}
}
}
存成文件不用我教你了吧?
hahu
2004-01-08
打赏
举报
回复
保存的时候就是按位阿
还是打开文本的时候看到二进制编码的文本
CString str="hello";
CString str2;
char *p;
str2.Format("%x",str);
LONG l;
l=strtol(str2.GetBuffer(0),&p,16);
_ltoa(l,str2.GetBuffer(100),2);
AfxMessageBox(str2);
str2.ReleaseBuffer();
chehw
2004-01-08
打赏
举报
回复
CString A, B;//A=10001111,B=1010011,........
LPBYTE a, b;
a=(LPBYTE)(LPCTSTR)A;
b=(LPBYTE)(LPCTSTR)B;
BYTE valA=0; //相对于A的一个8位整数
BYTE valB=0;//相对于B的一个8位整数
char ch;
while(ch=*a)
{
valA+=ch;
valA<<1;
a++;
}
while(ch=*b)
{
valB+=ch;
valB<<1;
b++;
}
再保存valA和valB到文件。
还原方法相当于把一个8位整数写为二进制字符串的形式。
BYTE val;
从文件中一次读取1个字节到val中。
TCHAR szVal[9]="";
int i=0;
while(val)
{
szVal[i++]=(val%2)+0x30;
val>>=1;
}
szVal[i]=0x31;
szVal[i+1]=0;
//反转字符串
int j;
for(j=0;j<(i+1)/2;j++)
szVal[j]=szVal[i-j];
海康视频卡动态库
/// 此DSP上第
一个
编码
通道在所有
编码
通道中的索引 /// uint firstEncodeChannelIndex; /// /// 此DSP所包含的解码通道个数 /// uint decodeChannelCount; /// /// 此DSP上第
一个
解码通道在所有解码...
2009.6.19—30举办3S研讨会暨Google Earth与Google Map等仿真建模与共享及ARCGIS与遥感高级程序员培训班
按照本培训内容,紧扣核心技术,采用理论及演讲和上机操作相结合,并结合实际案例,精讲多练(上课时间:上午、下午及晚上每天8.5--9.5小时),提高实际开发与操作技术,掌握了解最新技术动态应用,通过实际项目实例的...
《ACM竞赛-C/C++入门》 C语言-13
清华大学尹成老师、微软全球具有价值专家,手把手从基础教学到深入探讨,教你成为信息学竞赛高手,让你知识点一通百通拿到竞赛
高分
,为编程开发打下坚实的基础! 从零基础到在蓝桥杯、NOIP、ACM竞赛、信息学...
编码
器类型原理知识汇总(增量式/绝对式/绝对值)
绝对式
编码
器可以记录
编码
器在
一个
绝对坐标系上的位置,而增量式
编码
器可以输出
编码
器从预定义的起始位置发生的增量变化。 增量式
编码
器需要使用额外的电子设备(通常是PLC、计数器或变频器)以进行脉冲计数,并将...
1小时速通操作系统!期末
高分
通过!#操作系统 #大三 #期末复习 #考研 #速成
它们每
一个
都很小,不足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片。特点:易于实现,会使系统平均周转时间最短,系统吞吐量大。但忽视了作业的等待时间,不利于长作业,会出现“饿死”现象。例题...
图形处理/算法
19,468
社区成员
50,698
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章