How to convert 2 byte data to integer?
182 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Tharindu Weerakoon
le 26 Jan 2015
Commenté : mohd akmal masud
le 20 Fév 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
4391167
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..!
0 commentaires
Réponse acceptée
Guillaume
le 26 Jan 2015
Modifié(e) : Guillaume
le 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
1 commentaire
Plus de réponses (2)
Image Analyst
le 26 Jan 2015
Modifié(e) : Image Analyst
le 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:
x=[255 67]
% Display bytes in binary.
dec2bin(x(1))
dec2bin(x(2))
% If x(1) is the most significant byte:
x_uint16 = uint16(256*x(1) + x(2))
dec2bin(x_uint16)
% If x(1) is the least significant byte:
x_uint16 = uint16(256*x(2) + x(1))
dec2bin(x_uint16)
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:
x =
255 67
ans =
11111111
ans =
1000011
x_uint16 =
65347
ans =
1111111101000011
x_uint16 =
17407
ans =
100001111111111
You can replace uint16 by double if you want the data type to be double instead of uint16.
1 commentaire
Tharindu Weerakoon
le 27 Jan 2015
Modifié(e) : Tharindu Weerakoon
le 27 Jan 2015
Tharindu Weerakoon
le 27 Jan 2015
Modifié(e) : Tharindu Weerakoon
le 27 Jan 2015
1 commentaire
mohd akmal masud
le 20 Fév 2018
hi all,
i have image dicom 16 bit. Like below my image:
>>P=dicomread('PET_I1001_PT135.dcm');
>> 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?
Voir également
Catégories
En savoir plus sur Numeric Types dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!