紧急问题,高分求救,都来看看啊,关于数组的问题!

dongwei_sy 2007-10-15 04:50:15
一个byte型数组pchRealTimeInfo[80] 里面存放的是单精度浮点数(即float型),4字节表示一个数,现在我想把它变成int型数组pTemp[],长度为20 (即 pTemp[20]),也就是4个字节表示一个int数,该怎么做啊,在线坐等,谢谢!
...全文
198 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
virusswb 2008-05-15
  • 打赏
  • 举报
回复
循环这个数组啊pchRealTimeInfo
使用for循环,每到四个,就处理一下了,就处理前面三个成int,然后放进pTemp中啊
pigHead_chen 2008-05-15
  • 打赏
  • 举报
回复
本人小菜,但不同意一楼的做法
1 Array.Copy( pTemp , i , btemp , 0 , 4); 他的原意应该是Array.Copy(pchrealimeInfo , i , btemp , 0 , 4);
2 我怀疑float a = (float)Marshal.PtrToStructure(Marshal.UnsafeAddrOfPinnedArrayElement (btemp,0),typeof(float));不能转换成正确的float 值

我测试了下,代码如下


byte[] myP = new byte[4];
myP[0] = 49;
myP[1] = 50;
myP[2] = 51;
myP[3] = 52;
//a显示为0.000000166889336
float a = (float)Marshal.PtrToStructure(Marshal.UnsafeAddrOfPinnedArrayElement(myP, 0), typeof(float));

ASCIIEncoding encoding = new ASCIIEncoding();
//constructedString 显示为1234
string constructedString = encoding.GetString(myP);



我想做法应该是

byte[] pchrealimeInfo = ...
for (System.Int32 i = 0; i < 20; i++)
{
pTemp[i] = System.BitConverter.ToInt32(pchrealimeInfo, i * 4);
}



wagod 2008-05-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mqcan 的回复:]
引用 1 楼 whycom 的回复:
byte[] pchrealimeInfo = ...
ArrayList pTemp = new ArrayList();
for( int i=0 ; i <80 ; i+=4 )
{
byte[] btemp = new byte[4]
Array.Copy( pTemp , i , btemp , 0 , 4);
float a = (float)Marshal.PtrToStructure(Marshal.UnsafeAddrOfPinnedArrayElement (btemp,0),typeof(float));
int n = unchecked(a)
ptemp.add(n);
}
[/Quote]

正解
懒牛科技 2008-05-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 whycom 的回复:]
byte[] pchrealimeInfo = ...
ArrayList pTemp = new ArrayList();
for( int i=0 ; i <80 ; i+=4 )
{
byte[] btemp = new byte[4]
Array.Copy( pTemp , i , btemp , 0 , 4);
float a = (float)Marshal.PtrToStructure(Marshal.UnsafeAddrOfPinnedArrayElement (btemp,0),typeof(float));
int n = unchecked(a)
ptemp.add(n);
}
[/Quote]
ziseliuxingzh 2008-05-12
  • 打赏
  • 举报
回复
up
whycom 2007-10-15
  • 打赏
  • 举报
回复
byte[] pchrealimeInfo = ...
ArrayList pTemp = new ArrayList();
for( int i=0 ; i<80 ; i+=4 )
{
byte[] btemp = new byte[4]
Array.Copy( pTemp , i , btemp , 0 , 4);
float a = (float)Marshal.PtrToStructure(Marshal.UnsafeAddrOfPinnedArrayElement (btemp,0),typeof(float));
int n = unchecked(a)
ptemp.add(n);
}

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧