fwrite with fixed length of different data types
2 次查看(过去 30 天)
显示 更早的评论
I have a know format file with different reading format. Example -
fread(fid,[1, 40], 'char')
fread(fid,[1, 4], 'long')
fread(fid,[1, 1], 'short')
% These are data blocks
fread(fid,[400 1],'double')
fread(fid,[400 1],'int')
fread(fid,[400 1],'float')
Now, i have to write the data in the same fashion
fwrite(fid,strwrite,'40*char')
something like that -
how can i pad and fwrite of other data structures
0 个评论
回答(1 个)
Walter Roberson
2018-12-26
40*char is not a permitted fwrite precision .
The precision option is not intended to give information about how many elements are being written: instead it gives information about how each input element is to be represented as output. The number is determined by the size of the variable .
fwrite(fid,strwrite,'char')
If you need to pad then fwrite the pad values yourself .
fwrite(zeroes(1,7),'uint8')
for example .
It is not possible to fwrite two different datatypes in one call. (However memory mapping routines can input or output entire structure at a time .)
3 个评论
Walter Roberson
2018-12-31
no, pad(nodestr,16) would pad adding 16 values along the first dimension leading to a 17 x something character array.
Also C char is not fixed width: it is the smallest integer datatype supported by the target that is at least 8 bits and is implementation dependent as to whether it is signed or not. You should avoid defining interfaces in terms of char . Traditional C up to C89 did not offer any explicitly 8 bit datatype .
MATLAB fwrite char precision uses as many bytes as needed to encode the unicode input as the destination encoding specified or defaulted at fopen time. char*1 is 8 bit and will saturate for input beyond 255. C's char is not "wide" character .
Walter Roberson
2019-1-1
Some time ago I wrote a small function to fwrite() with padding or truncation to a given length. It is easy to do and makes it easier to write out fixed-width structures.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!