社区
Linux/Unix社区
帖子详情
高手请出手!!!!!!!!!
arally
2003-08-20 10:17:46
怎么用C 或C++实现linux的这个命令
#dd if=oldfile of=newfile conv=swab
因为要在windows平台下使用。
oldfile是一个short类型的数据流文件,但它是逆序字节排列的,用#dd if=oldfile of=newfile conv=swab才可以将字序正常排列,我不知道该文件的逆序是如何排列的,所有来请教各位。
谁能告诉我逆序字节(reverse byte order)的文件是怎么存储的也可以。
...全文
24
9
打赏
收藏
高手请出手!!!!!!!!!
怎么用C 或C++实现linux的这个命令 #dd if=oldfile of=newfile conv=swab 因为要在windows平台下使用。 oldfile是一个short类型的数据流文件,但它是逆序字节排列的,用#dd if=oldfile of=newfile conv=swab才可以将字序正常排列,我不知道该文件的逆序是如何排列的,所有来请教各位。 谁能告诉我逆序字节(reverse byte order)的文件是怎么存储的也可以。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fierygnu
2003-08-22
打赏
举报
回复
1、你怎么知道结果数据不正确?
2、能否把代码贴上来?
arally
2003-08-22
打赏
举报
回复
因为我不知道Digital Equipment Corporation (DEC) VAX computer怎么写入数据的,数据是从网上下载的,说明文件里只是说数据类型是short型的,16bit表示一个数,字节是reverse byte order的,我将读入的16位的前后字节顺序颠倒,最后的结果数据不正确。
fierygnu
2003-08-22
打赏
举报
回复
当然不对了,这是什么意思:
pix = tmpfile[i];
_itoa(pix,tel,2);
str1=tel;
str2 = str1.Right(8);
str3 = str1.Left(str1.GetLength()-8);
str1 = str2+str3;
应该是这样:
char *pShort = &tmpfile[i];
char ch = pShort[0];
pShort[0] = pShort[1];
pShort[1] = ch;
这才是字节交换。
arally
2003-08-22
打赏
举报
回复
1.因为数据是图像文件,每个像素用一个short类型存储,并且原文件是存储数据,没有文件头,如果读的正确然后再写入标准图像格式,比如位图,就可以看到读的结果是不是正确。
2.部分代码如下:
int i,j,k;
int kk = 0;
int tmpchar;
unsigned char elem;
unsigned char * headarray;
short * tmpfile;
short pix;
char pixl[2];
char tmpel1;
char tmpel2;
CString str1,str2,str3;
headarray = new unsigned char [ 256*256*113];
tmpfile = new short [256*256];
char flname[40];
char filename[40];
char tel[16];
FILE * fp;
for(k = 0;k < 109;k++)//有很多个文件
{
sprintf(filename,"E:\\head.%d",kk +=1);
fp = fopen(filename,"r");
fread(tmpfile,sizeof(short),256*256,fp);//文件大小
//256*256*2 byte
for(i = 0;i<256*256; i++)
{
pix = tmpfile[i];
_itoa(pix,tel,2);
str1=tel;
str2 = str1.Right(8);
str3 = str1.Left(str1.GetLength()-8);
str1 = str2+str3;
//fprintf(ppf,"%s\n",tel);
tmpchar = (short)Bin2Dec(str1);//我自己编的二进制转十
//进制的函数,没找到库函数
tmpfile[i] = tmpchar;
}
fclose(fp);
//.........保存为标准图像,这部分代码不会错
}
我试了很多办法都不行,我怀疑是不是原文件有错,但不应该啊,那个网站是stanford大学的,应该不会错。不知是哪里出问题了,我把下载数据的那个网址也给你,你可以看看,http://graphics.stanford.edu/data/voldata/ 第一个数据Data available as gzipped tar file (7.3 MB)
fierygnu
2003-08-21
打赏
举报
回复
怎么还自己up?还有问题?
arally
2003-08-21
打赏
举报
回复
自己up一下了 :(
fierygnu
2003-08-20
打赏
举报
回复
big-endian与little-endian与文件的存储字节顺序无关,只影响其中存储的short类型的两个字节的排列顺序(两种方式中两个字节的位置是颠倒的)。因此你只需要用与DEC上相同的方式读入文件,然后对读入的short进行字节序转换就可以了。因为big-endian方式是网络字节序,所以编程可以用ntohs进行转换。
arally
2003-08-20
打赏
举报
回复
谢谢你的回复!
原文件是用Digital Equipment Corporation (DEC) VAX computer写的,是逆字序排列的,应该是LSB MSB的方式排列的,也就是big-endian的方式。我要将这中方式转换为little-endian的方式,因为是在windows用的文件,而我不太清楚short类型的big-endian的文件的字节顺序到底是如何排列的,所有来求助。只是说可以用unix的#dd if=oldfile of=newfile conv=swab命令可以转。我想在windows下实现。
请帮忙,谢谢。
fierygnu
2003-08-20
打赏
举报
回复
big-endian与little-endian的转换?
低序字节存储在起始地址是little-endian方式,反之高序字节存储在起始地址则是big-endian。intel平台是little-endian方式。
所以,你说的逆序字节方式到底是哪种我不知道,不过既然是short类型,则2个字节交换就可以了。
淘宝海量数据产品技术架构
淘宝海量数据产品技术架构,看看
高手
是怎么
出手
的!!!
文心一言,通义千问?ChatGPT这么看!
首先,我得承认,阿里云和百度这两位大佬
出手
,确实让我有点紧张。毕竟他们都是行业里的翘楚,实力不容小觑。不过话说回来,竞争嘛,也是一件好事。就像咱们小时候学习,总是跟那个“学霸”争个你死我活的。竞争让...
阿里终于杀进5G了!“新基建”赛道谁更胜一筹
多年以来,隐匿于江湖,直到在少室山举行的武林群雄大会中,他在少林寺藏经阁中出场,向萧峰等众人解说强行练习少林派七十二绝技之弊,又以一人之力对战萧远山、萧峰、慕容博、鸠摩智等武林
高手
,轻松收服萧远山、...
马云收购士兰微_马云
出手
!阿里36亿拿下千方科技
原标题:马云
出手
!阿里36亿拿下千方科技财经头条精彩导读➤ 大盘绝地反击原因曝光,警惕三大现象➤ 大戏拉开!科创板3家企业首批“上会”➤ 又上新闻联播!郭树清:发展直接融资➤ 减持潮!丰乐种业拟减持不超过2%...
星辰变java镇东王府在哪里_星辰变中让人非常失望的四位
高手
,最后一位只动口不
出手
!...
成为一个
高手
是所有人都梦寐以求的事情,不只是主角其中还出现了很多的人物都非常的有特色,但是出现的这些人中有很多出场时以为是个
高手
,但是结果却让人很失望的四位
高手
,最后一位只动口不
出手
!第一位:易轻语易...
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章