关于c# 2进制数据高位和低位的问题 c#二进制数据高位 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 个人觉得在string转成byte的时候,可以将byte反转Array.Reverse(bytes); 这是C语言的算法 得出的值是正确的。 不太懂C语言- - void data_prepare(){ // UART_receive_buf(R_Data);//memcpy --mem copy buff_pos=0; Rad.object_id=R_Data[0]>>2;// 6bit Rad.length=((R_Data[0]&0x03)<<6)|((R_Data[1]&0xfc)>>2);//8bit Rad.speed_y=((R_Data[1]&0x03)<<9)|(R_Data[2]<<1)|((R_Data[3]&0x80)>>7);//11bit Rad.speed_x=((R_Data[3]&0x7f)<<4)|((R_Data[4]&0xf0)>>4);//11bit Rad.y_point=((R_Data[4]&0x0f)<<10)|(R_Data[5]<<2)|((R_Data[6]&0xc0)>>6);//14bit Rad.x_point=((R_Data[6]&0x3f)<<8)|R_Data[7];//14bit if((FeatureMeg[7]&0x02)==0){ //FeatureMeg 1 statis.Avspeed=FeatureMeg[0]<<8 | FeatureMeg[1]; statis.speed85=FeatureMeg[2]<<2 | (FeatureMeg[3]&0xc0); statis.headway=FeatureMeg[4]<<9 |(FeatureMeg[5]<<1)|(FeatureMeg[6]&0x80); statis.lane=(FeatureMeg[6]>>4)&0x07; statis.measureline=(FeatureMeg[6]&0x03)>>2; } else{ //FeatureMeg 2 statis.Occupancy=FeatureMeg[0]<<6 | FeatureMeg[1]>>2; statis.Volume=(FeatureMeg[1]&0x03)<<12 | (FeatureMeg[2]<<4)| ((FeatureMeg[3]&0xf0)>>4); statis.VehicleClass=FeatureMeg[3] & 0x0f; statis.Gap=FeatureMeg[4]<<9 |(FeatureMeg[5]<<1)|(FeatureMeg[6]&0x80); }}//static void data_calc(){void data_calc(){ int ID; float Length; float X_Speed,Y_Speed; float X_Point,Y_Point;// float Avspeed; int speed85,lane,measureline; long headway;// //?′ê±êy?Y???? ID=Rad.object_id; Length=Rad.length * 0.2; X_Point=(Rad.x_point - 8192) * 0.064; Y_Point=(Rad.y_point - 8192) * 0.064; X_Speed=(Rad.speed_x - 1024) * 0.1; Y_Speed=(Rad.speed_y - 1024) * 0.1; //í3??êy?Y???? Avspeed=(statis.Avspeed-32767) * 0.01; speed85=(statis.speed85-300); headway=statis.headway * 0.028; lane=statis.lane; measureline=statis.measureline; printf("ID=%d\n",ID); printf("Length= %4.2f m\n",Length); printf("X_Speed= %4.2f m/s\n",X_Speed); printf("Y_Speed= %4.2f m/s \n",Y_Speed); printf("X_Point= %4.2f m\n",X_Point); printf("Y_Point= %4.2f m\n",Y_Point);} C语言和Java都是通过移位来实现的 C语言,Java都是从高位到低位的转换的,但是C#貌似是相反的,所以得反转一下再处理 看下这个样子和C的代码结果一致不,C#这边的位移和逻辑运算和C没什么区别,一般都能移植的。你那段代码不对是因为this.bits = new BitArray(bytes);的时候每一个byte里的二进制位被反向了。internal class Program{ private static void Main(string[] args) { string temp = "58.29.FE.C0.A8.12.64.57"; byte[] bytes = Hex2ByteArr(temp); MyData data = new MyData(bytes); } public static byte[] Hex2ByteArr(string hexStr) { return hexStr.Split('.').Select(h => Convert.ToByte(h, 16)).ToArray(); }}internal class MyData{ public MyData(byte[] bytes) { if (bytes == null || bytes.Length != 8) throw new ArgumentException("must be an array of 8 bytes"); var object_Id = bytes[0] >> 2;// 6bit var length = ((bytes[0] & 0x03) << 6) | ((bytes[1] & 0xfc) >> 2);//8bit var speed_y = ((bytes[1] & 0x03) << 9) | (bytes[2] << 1) | ((bytes[3] & 0x80) >> 7);//11bit var speed_x = ((bytes[3] & 0x7f) << 4) | ((bytes[4] & 0xf0) >> 4);//11bit var y_point = ((bytes[4] & 0x0f) << 10) | (bytes[5] << 2) | ((bytes[6] & 0xc0) >> 6);//14bit var x_point = ((bytes[6] & 0x3f) << 8) | bytes[7];//14bit ObjectId = object_Id; ObjectLength = length * 0.2f; RangeX = (x_point - 8192) * 0.064f; RangeY = (y_point - 8192) * 0.064f; VelocityX = (speed_x - 1024) * 0.1f; VelocityY = (speed_y - 1024) * 0.1f; } public int ObjectId { get; set; } public float ObjectLength { get; set; } public float VelocityY { get; set; } public float VelocityX { get; set; } public float RangeY { get; set; } public float RangeX { get; set; }} json中文编码怎么转换成C#中文 为什么要用哈希表存放键值对? 这个脚本的星期如何处理? 生成的dll文件,为何改名后,就无法被别的程序引用了呢? c#怎么自定义数据类型!诚心请教! 我的Visual Studio2005怎么了? 安装C#编写的Windows服务,如何获取他占用的端口,和服务的描述等信息 怎样在 C#.net 中用代码创建数据库,谢谢答复。在线等待! 各位,如何部署引用了word的应用程序? 数据库占用太多内存 C#用COM导出Excel时,Excel不保存在服务器上,用Session保存Excel内容,直接给客户端下载 JSON的问题,求教
void data_prepare(){
// UART_receive_buf(R_Data);//memcpy --mem copy
buff_pos=0;
Rad.object_id=R_Data[0]>>2;// 6bit
Rad.length=((R_Data[0]&0x03)<<6)|((R_Data[1]&0xfc)>>2);//8bit
Rad.speed_y=((R_Data[1]&0x03)<<9)|(R_Data[2]<<1)|((R_Data[3]&0x80)>>7);//11bit
Rad.speed_x=((R_Data[3]&0x7f)<<4)|((R_Data[4]&0xf0)>>4);//11bit
Rad.y_point=((R_Data[4]&0x0f)<<10)|(R_Data[5]<<2)|((R_Data[6]&0xc0)>>6);//14bit
Rad.x_point=((R_Data[6]&0x3f)<<8)|R_Data[7];//14bit
if((FeatureMeg[7]&0x02)==0){
//FeatureMeg 1
statis.Avspeed=FeatureMeg[0]<<8 | FeatureMeg[1];
statis.speed85=FeatureMeg[2]<<2 | (FeatureMeg[3]&0xc0);
statis.headway=FeatureMeg[4]<<9 |(FeatureMeg[5]<<1)|(FeatureMeg[6]&0x80);
statis.lane=(FeatureMeg[6]>>4)&0x07;
statis.measureline=(FeatureMeg[6]&0x03)>>2;
}
else{
//FeatureMeg 2
statis.Occupancy=FeatureMeg[0]<<6 | FeatureMeg[1]>>2;
statis.Volume=(FeatureMeg[1]&0x03)<<12 | (FeatureMeg[2]<<4)| ((FeatureMeg[3]&0xf0)>>4);
statis.VehicleClass=FeatureMeg[3] & 0x0f;
statis.Gap=FeatureMeg[4]<<9 |(FeatureMeg[5]<<1)|(FeatureMeg[6]&0x80);
}
}
//static void data_calc(){
void data_calc(){
int ID;
float Length;
float X_Speed,Y_Speed;
float X_Point,Y_Point;
//
float Avspeed;
int speed85,lane,measureline;
long headway;
//
//?′ê±êy?Y????
ID=Rad.object_id;
Length=Rad.length * 0.2;
X_Point=(Rad.x_point - 8192) * 0.064;
Y_Point=(Rad.y_point - 8192) * 0.064;
X_Speed=(Rad.speed_x - 1024) * 0.1;
Y_Speed=(Rad.speed_y - 1024) * 0.1;
//í3??êy?Y????
Avspeed=(statis.Avspeed-32767) * 0.01;
speed85=(statis.speed85-300);
headway=statis.headway * 0.028;
lane=statis.lane;
measureline=statis.measureline;
printf("ID=%d\n",ID);
printf("Length= %4.2f m\n",Length);
printf("X_Speed= %4.2f m/s\n",X_Speed);
printf("Y_Speed= %4.2f m/s \n",Y_Speed);
printf("X_Point= %4.2f m\n",X_Point);
printf("Y_Point= %4.2f m\n",Y_Point);}
C语言和Java都是通过移位来实现的
{
private static void Main(string[] args)
{
string temp = "58.29.FE.C0.A8.12.64.57";
byte[] bytes = Hex2ByteArr(temp);
MyData data = new MyData(bytes);
} public static byte[] Hex2ByteArr(string hexStr)
{
return hexStr.Split('.').Select(h => Convert.ToByte(h, 16)).ToArray();
}
}internal class MyData
{
public MyData(byte[] bytes)
{
if (bytes == null || bytes.Length != 8)
throw new ArgumentException("must be an array of 8 bytes"); var object_Id = bytes[0] >> 2;// 6bit
var length = ((bytes[0] & 0x03) << 6) | ((bytes[1] & 0xfc) >> 2);//8bit
var speed_y = ((bytes[1] & 0x03) << 9) | (bytes[2] << 1) | ((bytes[3] & 0x80) >> 7);//11bit
var speed_x = ((bytes[3] & 0x7f) << 4) | ((bytes[4] & 0xf0) >> 4);//11bit
var y_point = ((bytes[4] & 0x0f) << 10) | (bytes[5] << 2) | ((bytes[6] & 0xc0) >> 6);//14bit
var x_point = ((bytes[6] & 0x3f) << 8) | bytes[7];//14bit ObjectId = object_Id;
ObjectLength = length * 0.2f;
RangeX = (x_point - 8192) * 0.064f;
RangeY = (y_point - 8192) * 0.064f;
VelocityX = (speed_x - 1024) * 0.1f;
VelocityY = (speed_y - 1024) * 0.1f;
} public int ObjectId { get; set; }
public float ObjectLength { get; set; }
public float VelocityY { get; set; }
public float VelocityX { get; set; }
public float RangeY { get; set; }
public float RangeX { get; set; }
}