How to convert 2 byte data to integer?
152 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Tharindu Weerakoon
el 26 de En. de 2015
Comentada: mohd akmal masud
el 20 de Feb. de 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 comentarios
Respuesta aceptada
Guillaume
el 26 de En. de 2015
Editada: Guillaume
el 26 de En. de 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 comentario
Más respuestas (2)
Image Analyst
el 26 de En. de 2015
Editada: Image Analyst
el 26 de En. de 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 comentario
Tharindu Weerakoon
el 27 de En. de 2015
Editada: Tharindu Weerakoon
el 27 de En. de 2015
Tharindu Weerakoon
el 27 de En. de 2015
Editada: Tharindu Weerakoon
el 27 de En. de 2015
1 comentario
mohd akmal masud
el 20 de Feb. de 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?
Ver también
Categorías
Más información sobre Numeric Types 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!