2字节数据转换为整数吗?

339(30天)
我有一个两个字节数据(unsigned)数组。
例如,x = (255 67)
我读的数据从一个传感器给一串字节数据(无符号0到255)。从我选择相应的两字节的数据设置必要的参数计算。
我想将这转化为一个整数值或双重价值真正的数学计算。
我试着用。
1 x = uint8 ([0]) y =定型(x, uint32) %,但这给了一个错误。
如果我使用:x = uint16 (67 [255]) y =定型(x,“uint32”)
%的答案是
4391167
我不如何检查答案是否正确。或转换的语法是正确的吗?
谁能给我正确的代码2字节数据转换整数. . !

接受的答案

Guillaume
Guillaume 2015年1月26日
编辑:Guillaume 2015年1月26日
你几乎是那里。结合两个字节(uint8)不会使一个32位的数字(uint32),但一个16位数字(uint16),所以:
x = (255 - 67);
y =定型(uint8 (x)“uint16”);
你没有指定了 字节顺序 你的数据,也没有你的机器。如果两个不匹配,你必须 swapbytes 之后:
truey = swapbytes (y);如果是大端法和其他litte-endian %
1评论
Tharindu Weerakoon
Tharindu Weerakoon 2015年1月27日
嗨,盖伊表示,
实际上我在c#程序的字节数组:(简单,不是真正的命令)byte [] x;x ={20日0,255,178,0,35岁,255年,138年}
日元:转换字节值20(从右边低字节)整数在c# (int)和回答应该等于20。
Y2:两个字节数组[0 1](1:低字节)应该转化为int16然后答案应该等于1
Y3:两个字节数组(255 178)(低字节178)应该转换int16然后答案除以32767.0 f / 360.0 f在c# -0.93387应该给答案的样子。
两个字节数组Y4:[0 35](低字节是35)应该转化为int16然后除以32767.0 f / 360.0 0.56032 f应该给答案的样子
日元:两个字节数组(255 138)(低字节是138)应该转化为int16然后除以32767.0 f / 3.0 -0.01053 f应该给答案的样子。
供您参考我在这里把我的c#代码更清晰地理解我的问题。
> / / / <总结
/ / /构造函数
/ / / < /总结>
/ / / < param name =“X”> < / param >
公共DataConversion (byte [] X)
{
/ /解码
int指数= 0;
日元= (int) X(指数+ +);
Y2 = (Decode2byte (X[索引+ +],[索引+ +])= = 1);
双偏压= 0;
偏见= 32767.0 f / 360.0 f;
Y3 = Decode2byte (X[索引+ +],[索引+ +])/偏差;
Y4 = Decode2byte (X[索引+ +],[索引+ +])/偏差;
偏见= 32767.0 f / 3.0 f;
日元= Decode2byte (X[索引+ +],[索引+ +])/偏差;
}
> / / / <总结
/ / /两个字节数据转换int16
/ / / < /总结>
/ / / < param name =“data1”> < / param >
/ / / < param name =“data2”> < / param >
/ / / <返回> < /返回>
私人Int16 Decode2byte(字节data1、字节data2)
{
返回(Int16) (data1 < < 8 | data2);
}
你能告诉我我如何用matlab

登录置评。

更多的答案(2)

图像分析
图像分析 2015年1月26日
编辑:图像分析 2015年1月26日
我不知道哪个元素x的上部或下部字节,所以我做了这两种方法。试试这个:
x = (255 67)
%显示二进制字节。
dec2bin (x (1))
dec2bin (x (2))
%如果x(1)是最重要的字节:
x_uint16 = uint16 (256 * x (1) + (2))
dec2bin (x_uint16)
%如果x(1)最低有效字节:
x_uint16 = uint16 (256 * (2) + x (1))
dec2bin (x_uint16)
注意,x必须双或uint16变量,不是一个char或uint8变量,否则你不能乘以256。
在命令窗口中,你会看到:
x =
255 67
ans =
11111111
ans =
1000011
x_uint16 =
65347年
ans =
1111111101000011
x_uint16 =
17407年
ans =
100001111111111
你可以通过双取代uint16如果你想要的数据类型而不是uint16两倍。
1评论
Tharindu Weerakoon
Tharindu Weerakoon 2015年1月27日
编辑:Tharindu Weerakoon 2015年1月27日
你好,
实际上我得到的数据作为无符号字节数据(uint8)(0 - 255),然后我想要转换成签署int16(2 ^ 15 - 2 ^ 15 - 1)的数据。
我在c#程序的字节数组:(简单,不是真正的命令)byte [] x;x ={20日0,255,178,0,35岁,255年,138年}
日元:转换字节值20(从右边低字节)整数在c# (int)和回答应该等于20。
Y2:两个字节数组[0 1](1:低字节)应该转化为int16然后答案应该等于1
Y3:两个字节数组(255 178)(低字节178)应该转换int16然后答案除以32767.0 f / 360.0 f在c# -0.93387应该给答案的样子。
两个字节数组Y4:[0 35](低字节是35)应该转化为int16然后除以32767.0 f / 360.0 0.56032 f应该给答案的样子
日元:两个字节数组(255 138)(低字节是138)应该转化为int16然后除以32767.0 f / 3.0 -0.01053 f应该给答案的样子。
供您参考我在这里把我的c#代码更清晰地理解我的问题。
> / / / <总结
/ / /构造函数
/ / / < /总结>
/ / / < param name =“X”> < / param >
公共DataConversion (byte [] X)
{
/ /解码
int指数= 0;
日元= (int) X(指数+ +);
Y2 = (Decode2byte (X[索引+ +],[索引+ +])= = 1);
双偏压= 0;
偏见= 32767.0 f / 360.0 f;
Y3 = Decode2byte (X[索引+ +],[索引+ +])/偏差;
Y4 = Decode2byte (X[索引+ +],[索引+ +])/偏差;
偏见= 32767.0 f / 3.0 f;
日元= Decode2byte (X[索引+ +],[索引+ +])/偏差;
}
> / / / <总结
/ / /两个字节数据转换int16
/ / / < /总结>
/ / / < param name =“data1”> < / param >
/ / / < param name =“data2”> < / param >
/ / / <返回> < /返回>
私人Int16 Decode2byte(字节data1、字节data2)
{
返回(Int16) (data1 < < 8 | data2);
}
你能告诉我我如何用matlab

登录置评。


Tharindu Weerakoon
Tharindu Weerakoon 2015年1月27日
编辑:Tharindu Weerakoon 2015年1月27日
大家好,
谢谢你的帮助。最后,我可以做到。
%两字节数组(低,高一些)x = uint8 (178 255)
%转换为签署int16 y =定型(x,“int16”)
%如果想使用其他的数学计算,应该转换成双。z =双(y)
%简单的数学操作。int16范围值为-32768 ~ 32767 = (z / 32767) * 250
结果将是x = 178 255
y = -78
z = -78
出= -0.595110934781945
再次感谢所有
1评论
穆罕默德阿克毛马苏德•
你好,
我有图像dicom 16位。像下面的我的形象:
> > P = dicomread (“PET_I1001_PT135.dcm”);
> >谁P
的名字大小字节属性
P256 x256131072年int16
我的问题是,16位图像可以存储像素值到32767只。现在我想把它改成32位或64位的像素值可以存储多,和相应的活动多少放射性核素我用来诊断病人。
你能帮助转换,使用matlab吗?还是无论如何解决它?

登录置评。

类别

找到更多的在数值类型帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!