fidw=fopen('写文件名.txt','w')
tr=fgetl(fidr)
while ischar(tr)
a=cellfun(@str2num,regexp(tr,'[\s:]','split'))
num=a(1)
datar=reshape(a(2:end),2,[])
dataw=[]
dataw(datar(1,:))=datar(2,:)
tw=sprintf('%g,',dataw)
tw=[tw(1:end-1) ' ' num2str(num)]
fprintf(fidw,[tw '\r\n'])
tr=fgetl(fidr)
end
fclose(fidr)
fclose(fidw)
如果你原有的文件每一行都是1 1:1 3:0.99539 4:-0.05889 这种格式
那么以上代码可以将每一行转为1,0,0.99539,-0.05889 1格式
第一第二行中,改为你原文件的文件名,和转格式后保存成的文件名
一般来说用dec2hex及hex2dec就可以。ss='010600001388849C'
ssDec
=
hex2dec(ss)
ssHex
=
dec2hex(ssDec)
format
hex
disp(ssHex)
不过前提是你的机器能处理这么大的数。
我用小一点的数比如说ss='01600001388849C'测试的结果是没问题的,但是我的机器不能处理大于2^52的数,所以很抱歉无法完成你给出的这个例子。
====================================
补充回答:
拆分合并的方法试了试,
但是不知道你究竟要怎么用,也没有继续;希望你能把问题描述的更详细一点,特别是最终目的是干什么。
Matlab中关于大数处理有几个方法
1.调用maple内核运算,但是我的matlab版本中没有;
2.拆分合并,ss(1)~
ss(16)依次对应'010600001388849C'
中的各个位上的数,可以考虑用上。
3.换Ubuntu
Linux,可支持8G内存运算,也许可行。
4.实在没有适合方法,就只能改算法了。
很抱歉还是没搞定。
====================================
补充回答:
终于理解你的问题了,呵呵!
你试试下面这样的写法可不可以:
A
=
[1
06
0
0
19
136
132
156]
fwrite(s,
A,
'char',
'async')
其中,A是对应你要输入的'010600001388849C'
这个十六进制数的十进制表示,你用dec2hex(A)可以得到
01
06
00
00
13
88
84
9C.
有可能还有问题,不过你可以尝试在这个思路上再改改。
====================================
旋转步骤:
一 matlab函数:B = imrotate(A,angle,method);A是原始图像,angle是旋转角度,B为旋转后的图像;
二 使用method参数可以改变插值算法。 B = imrotate(A,angle,method,bbox)bbox参数用于指定输出图像属性:'crop': 通过对旋转后的图像B进行裁剪, 保持旋转后输出图像B的尺寸和输入图像A的尺寸一样。{'loose'}: 使输出图像足够大, 以保证源图像旋转后超出图像尺寸范围的像素值没有丢失。 一般上这种格式产生的图像的尺寸都要大于源图像的尺寸。