How to convert 2 byte data to integer?
447 views (last 30 days)
Show older comments
Tharindu Weerakoon on 26 Jan 2015
Commented: mohd akmal masud on 20 Feb 2018
I have a two byte data (unsigned) as array.
e.g. x=[255 67]
I read the data from a sensor giving a stream of byte data (unsigned 0 to 255). From them I select corresponding two-byte of data set for necessary parameter calculation.
I want to convert this into an Integer value or a double value to do real mathematic calculations.
I tried with.
x=uint8([1 0]) y=typecast(x,'uint32') % but this gives an error.
if I use: x=uint16([255 67]) y=typecast(x,'uint32')
% answer is
I don't how to check the answer is correct or not. Or the conversion syntax is correct?
Can anyone give me the code for correct 2-byte data conversion to integer..!
Guillaume on 26 Jan 2015
Edited: Guillaume on 26 Jan 2015
You were nearly there. combining two bytes (uint8) does not make a 32-bit number (uint32), but a 16-bit numbers (uint16), so:
x = [255 67];
y = typecast(uint8(x), 'uint16');
You haven't specified the endianness of your data, nor that of your machine. If the two don't match, you'll have to swapbytes afterward:
truey = swapbytes(y); %if one is big-endian and the other litte-endian
More Answers (2)
Image Analyst on 26 Jan 2015
Edited: Image Analyst on 26 Jan 2015
I don't know which element of x is the upper or lower byte, so I did it both ways. Try this:
% Display bytes in binary.
% If x(1) is the most significant byte:
x_uint16 = uint16(256*x(1) + x(2))
% If x(1) is the least significant byte:
x_uint16 = uint16(256*x(2) + x(1))
Note that x must be a double or a uint16 variable, not a char or uint8 variable or else you can't multiply by 256.
In the command window, you'll see:
You can replace uint16 by double if you want the data type to be double instead of uint16.
Edited: Tharindu Weerakoon on 27 Jan 2015
mohd akmal masud on 20 Feb 2018
i have image dicom 16 bit. Like below my image:
>> whos P
Name Size Bytes Class Attributes
P 256x256 131072 int16
My problem is, 16 bit image can stored pixel value till 32767 only. Now i want change it to 32 bit or 64 bit so that the pixel value can stored more than that, and corresponding how much activity radionuclides i used to diagnosed patient.
can you help to convert that using matlab? or anyway to solve it?
Find more on Numeric Types in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!