matlab写出十六进制文件到txt 35
小弟做视频压缩。。通过各种算法后最终产生一组数据流。。。假设数据流是十六进制的00000178B3,用dlmwrite输出的只有ascii码,小弟想要的是十六进制码,不知...
小弟做视频压缩。。通过各种算法后最终产生一组数据流。。。假设数据流是十六进制的 00000178B3,用dlmwrite输出的只有ascii码,小弟想要的是十六进制码,不知是否有方法?
展开
2个回答
展开全部
没太懂你的意思。我理解是你已经得到了十六进制的字符串,想写进文件中对么?用fprintf吧,跟C语言里边的一样,看我下边的程序,执行了几遍的结果:
更多追问追答
追问
不好意思没表述清楚。。。00 00 01 78 B3 是我想要的十六进制,如果写到txt,就会变成char型,这时十六进制就会变成 30 30 30 30 30 31 37 38 41 33,也就是ascii编码了。。。。我想要的是00 00 01 78 B3而不是30 30 30 30 30 31 37 38 41 33
追答
你依然没有说清楚。你这个十六进制数是什么格式?是字符串格式么?
如果你是字符串格式,按照我这样来就没问题了么~
fp=fopen('a.txt','a+');
num=dec2hex(96435,10);
fprintf(fp,'%s ',num);
fclose(fp);
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我也想问这个问题~你把十六进制写到文件里面,然后用vc编译器打开它可以显示十六进制,不知能否符合你的要求呢?
追问
我就是想要这样的效果,可是matlab中一写到txt,十六进制就变成char型了。。不知道如何解决
追答
clear ;
data_fname = 4.txt' ; % 这里是16进制文件名
matlab是默认二进制形式打开文件的
file_id = fopen(data_fname, 'rb');
% 先手工构造一个1x16大小的矩阵
raw_data = [1:1:16] ;
while feof(file_id) == 0
% 数据类型是int8,这样就是8个比特吧,正好是16进制的两个字符
% raw_array每次都是读16x1的矩阵,ele_count为读入的数的个数(这个数随便取)
[row_array, ele_count] = fread(file_id, 16, 'int8') ;
if ele_count < 16 % elecount < 16代表数据不够,已经到了文件的结尾
break ;
else
% 将16x1的row_array转置一下,变为1x16的矩阵
row_array = row_array' ;
% 然后,将row_array追加到raw_data中
raw_data = [raw_data; row_array] ;
end
end
% get off the first line [1:1:512]
% 这里就是要把raw_data的第一行数据手工构造的那行数据给去掉,剩下的就都是文件中的数据了
raw_data(1,:)=[] ;
% 关闭文件
fclose(file_id);
%下面要转为16进制了
raw_data(find(raw_data<0))=raw_data(find(raw_data<0))+256;
b=dec2hex(raw_data);%以列顺序转换
%现在就得到了字符显示的十六进制的数据,接下来应该可以写到文本里去了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询