请教个C#char和int的转换问题
C++下这样的实现:char buf[4] ;从串口接收了四个字节,0x55,0xaa,0x55,0xbb,将这四个字节放入接收buf(char型)后,现在需要提取出来判断是否为帧头0x55aa55bb,即需要从char型数组里面提取四个字节转换为一个整形数据,在C++下 直接int temp =*(int*)buf即可,请问在C#下怎么实现?谢谢大家
还有比如我不是取开头的四个字节,而是中间某个字节开始的四个字节呢?
c#
c++
------解决方案-------------------- BitConverter .ToInt32 (new byte [],int startIndex);
------解决方案--------------------
ary是个char数组
int sum = (int)chararray.Skip(0).Take(4).Select((t, index) => t * Math.Pow(2, 24 - index * 8)).Sum();
------解决方案--------------------同意9楼的办法,但似乎有错,跟楼主要求的有点不一样,改成下面这样可满足楼主的需求
int sum=0;
int startIndex=0;
for(int i=0;i<4;i++)
{
sum += ( ch[ startIndex+i ] * 256^((4-i) );//这步跟9楼不一样
}
这个是根据16进制的特性来的,比如帧头是0x55,0xaa,0x55,0xbb,想变成整形0x55aa55bb。
0x55aa55bb=0x55*256^3+0xaa*256^2+0x55*256+0xbb
就把一个字节看成是一个进制好了,那么就是256进制,规则参照十进制
------解决方案--------------------c#是谁发明的?
我整理了下:
string result=string.Empty;
byte[] arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
//method 1;
int intVal = 0;
int startIndex = 1;
for (int i = 0; i < 4; i++)
{
intVal += ( arr[startIndex + i] * (int)Math.Pow(256,i));
}
result += intVal.ToString() + "; ";
//method 2;
intVal = 0;
intVal= BitConverter.ToInt32(arr, 1);
result += intVal.ToString() + "; ";
//method 3;
intVal = 0;
using (MemoryStream ms = new MemoryStream(arr))
{
ms.Seek(1, SeekOrigin.Begin);