使用Matlab读取txt文件中的ASCII码字符

问题1如上图,有此txt文件,路径为'C:\111.txt',其中存储的数据为4096个8位16进制数据,即共4096个字节。这些数据的真正含义是,每4个字节应该为一组,... 问题1

如上图,有此txt文件,路径为'C:\111.txt',其中存储的数据为4096个8位16进制数据,即共4096个字节。
这些数据的真正含义是,每4个字节应该为一组,表示一个有符号的十进制数据,即总共有1024个有符号10进制数。
现在,我想用matlab将这个txt表示的1024个十进制数据提取出来,存入A[1024,1]矩阵,该怎么写程序?
高分相赠。
另外,还有个问题2:

此txt实际为第一个txt文件的源码,只不过是将222.txt中的各个字符转化为了16进制数,并以字节形式用空格进行隔开,
若我现在要用Matlab直接对222进行操作,得到如111.txt中的4096个字节,进而得到1024个十进制数据,该怎么做。
注:解答出问题一即有分,若解答出问题二,追加分分
txt文件网盘链接
http://pan.baidu.com/s/1bnzWm8v
Dec为最后对应的十进制结果
展开
 我来答
WM_THU
推荐于2017-12-15 · TA获得超过7164个赞
知道大有可为答主
回答量:4285
采纳率:80%
帮助的人:3966万
展开全部

问题二可以比较简单的解决:

fid = fopen('222.txt');
C = fread(fid, inf, 'int32', 0, 'b');
fclose(fid);

得到C就是要求的矩阵。


问题一先给一个不完全正确的程序:

fid = fopen('111.txt');
C = textscan(fid,'%s');
fclose(fid);
C = reshape(C{1}, 4, []).';
CM = cell2mat(C);
Data = hex2dec(CM)
Data = int32(Data)

问题一的主要麻烦在于,表示负整数的十六进制字符串比如“FFFFFE90”使用hex2dec时,其最高位的1不被认为是负数标志,而被当做更大的整数处理。因此强制转换成int32类型后,这些负数都截断成了int32的最大允许值。这里还需要进一步处理。

alljoyland
2014-08-16
知道答主
回答量:16
采纳率:0%
帮助的人:11万
展开全部
问题2要在先,问题1在后
读取数据很容易,假定文件为randi-1.bin
f6 = 'randi-1.bin'
fid1 = fopen(f6)
xx3 = fread(fid1,1024,'integer*4',0,'b');
fclose(fid1)
结果比如:
>> xx3(1:3)
ans =
568
984
941

第二步把数据再转为hex写出即可

xx4 = fi(xx3, 1, 32, 0);
xx5 =upper(hex(xx4));

fid = fopen('randi-2.txt', 'w');
fprintf(fid,xx5','%s')
fclose(fid);

结果文件randi-2.txt中为(我没有加空格)
00000238000003D8000003AD00000309000000F5000002D3000000AB....

句子简单,但用的函数比较高级,你可能需要一定基础才能看懂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飞跃梦想华
2014-08-15 · TA获得超过333个赞
知道小有建树答主
回答量:388
采纳率:89%
帮助的人:110万
展开全部
你还是把txt传上来看看吧
追问
不会传啊。
追答
你加我qq 810783453
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式