How to convert a .txt file of 16 bit binary values into signed 16bit integers

I have a .txt file of 16 bit binary numbers. However, the numbers are stored as bytes seperated by spaces, ex. 00001111 00001111 11110000 11110000 are the decimal numbers 3855 and 61680. I want Matlab to read the text file, removing every other space to form seamless 16bit binary numbers. I then want these 16bit binary numbers to be converted into signed 16 bit integer using signed 2's compliment.
I know that I can use fopen and fileread to read the numbers from the file, but I don't know how to remove every other space to form seamless 16bit binary numbers. I am also not sure how to properly convert from 16bit binary (signed 2's compliment) to signed 16 bit integers.
I have included an example .txt file. The decimal representations of the numbers are 2, 64, 128, and 2048.
Any help regarding what functions/algorithms to use is greatly appreciated.

 Accepted Answer

A=readcell('Binary.txt');
B = strsplit(A{:},' ');
C=reshape(B,2,[])';
D=cellfun(@(x,y) horzcat(x,y),C(:,1), C(:,2), 'UniformOutput', false);
E=int16(bin2dec(D));
E =
4×1 int16 column vector
2
64
128
2048

3 Comments

Is there a way to make this work with negatives values, represented with signed 2's compliment in binary? When I test this with negative values, all negative values return 32767. I intended to have a range -32,768 to +32,767, and I'm not sure why exactly this is converting all negative values to the top of the range.
For example:
00000000 00000010 11111111 11110000 00000000 10000000 11111000 00000000 would be 2, -16, 128, -2048
Sorry, overlook signed 2's compliment
E = bin2dec(D);
F = int16(E-(E>32768)*65536)
Now it works perfectly, thank you so much!

Sign in to comment.

More Answers (1)

I assume you want to know how you can deal with 16 bit values. The following MATLAB Answers link has a similar query, you can check this out:

Categories

Products

Release

R2019b

Community Treasure Hunt

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

Start Hunting!