使用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为最后对应的十进制结果 展开
如上图,有此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为最后对应的十进制结果 展开
3个回答
展开全部
问题二可以比较简单的解决:
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的最大允许值。这里还需要进一步处理。
展开全部
问题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....
句子简单,但用的函数比较高级,你可能需要一定基础才能看懂
读取数据很容易,假定文件为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....
句子简单,但用的函数比较高级,你可能需要一定基础才能看懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你还是把txt传上来看看吧
追问
不会传啊。
追答
你加我qq 810783453
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询