writing a 16-bit binary file

11 visualizaciones (últimos 30 días)
Robert
Robert el 12 de En. de 2014
Comentada: Walter Roberson el 8 de Jul. de 2021
Hi there,
I am trying to produce a text file of 16-bit binary to test a C program.
I can write to a file, but it writes to the file in scientific notation. I am basically after a file with about 2048 lines of 16-bit ones and zeros or alternatively, just in standard form as in: 32767 -32768 not 3.2767e -4
if that could be put in the form of
0000 0010 1100 1000
kind of data that would be even better. I can only get this far. I am using a sine wave to generate the numbers, and the data only need be approximate, as it is to test a C routine that takes data straight from a circuit.
x = 0:1:1024; y = 32767*sin(x); fid = fopen('data.txt','w'); writebytes(fid, '%5.0d\n',y); fclose(fid);
kind regards Rob
  2 comentarios
Asaad
Asaad el 23 de Nov. de 2019
can i convert any binary number into 16 bit binary number ? If yes how what is the matlab code for it?
Walter Roberson
Walter Roberson el 23 de Nov. de 2019
if isa(TheNumber, 'uint8')
output = uint16(TheNumber);
elseif isa(TheNumber, 'int8')
output = typecast( int16(TheNumber), 'uint16');
else
output = typecast(TheNumber, 'uint16');
end
If the original number was more than 16 bits wide then output will be a vector of uint16 . It is not obvious what 16 bit number you would want output if the input was, for example, a double.

Iniciar sesión para comentar.

Respuestas (3)

dpb
dpb el 12 de En. de 2014

Jan
Jan el 12 de En. de 2014
writebytes is thought for mupad objects. fprintf will be better:
fid = fopen('data.txt','w');
fprintf(fid, '%5.0d\n', y);
fclose(fid);

Robert
Robert el 12 de En. de 2014
No, this is still giving me the text in the form: 3e+04
I need the data written in the file as either 16 bit binary, or just plain decimal if that is all matlab can do.
  5 comentarios
dpb
dpb el 12 de Oct. de 2017
Editada: dpb el 13 de Oct. de 2017
I did go read; at least you did clarify there you are trying to write a stream file...the problem is undoubtedly in how you're holding the data internally; Matlab does "saturate" signed integers in some of the dec2hex and like but there's no issue in writing an unsigned int to stream file with fwrite.
I just did the same exercise as above excepting with
>> val=uint16(1:65535);
and verified each and every element is in the file...
We need to see precise code you used that cause the problem to be able to see where you went wrong, specifically.
But, the answer is probably shown by
>> v=int16(0:65535);
>> v(1)
ans =
0
>> v(end)
ans =
32767
>> sum(v==v(end))
ans =
32769
>> v(length(v/2)-4:length(v/2)+4)
Index exceeds matrix dimensions.
>> v(length(v)/2-4:length(v)/2+4)
ans =
32763 32764 32765 32766 32767 32767 32767 32767 32767
>>
OTOH,
>> v=uint16(0:65535);
>> [v(1) v(end)]
ans =
0 65535
>>
The problem is NOT fwrite, it's how you're storing the data internally; fwrite faithfully will output what's in memory.
Walter Roberson
Walter Roberson el 8 de Jul. de 2021
By the way, these days dec2bin handles negative values.

Iniciar sesión para comentar.

Categorías

Más información sobre Characters and Strings en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by