如果我忽略了这里的快速修复方法,请原谅,但我已经阅读并研究了许多其他关于将float[]
转换为byte[]
并返回到float[]
的答案,但仍然不明白为什么我会从下面的代码中得到意外的结果。我正在将float[]
转换为byte[]
,以便作为blob存储在SQLite数据库中。然而,在将我的byte[]
加载到数据库之前,我检查了一下,以确保我可以准确地将其转换回float[]
,但我得到的结果与我转换的float[]
不匹配。我确实研究了endianness问题,并发现了这一点(下面有评论(,但结果虽然不同,但仍然出乎意料。如果能朝着正确的方向前进,我们将不胜感激——这对我来说是一个新的领域。谢谢!
由5个矢量3组成的测试数组应分别读取:(1,2,3(,而我得到:(0,1,2(、(0,0,0(、
//////////
// input
var numPositions = 5;
var particlePositionsArrayForEachSegment = new Vector3[numPositions];
for (int i = 0; i < particlePositionsArrayForEachSegment.Length; i++)
{
Vector3 vector = new Vector3(1f, 2f, 3f);
particlePositionsArrayForEachSegment[i] = vector;
}
byte[] buff = new byte[particlePositionsArrayForEachSegment.Length * (sizeof(float) * 3)];
for (int j = 0; j < particlePositionsArrayForEachSegment.Length; j++)
{
/*if (BitConverter.IsLittleEndian)
{
// x
byte[] xBytes = BitConverter.GetBytes(particlePositionsArrayForEachSegment[j].x);
Array.Reverse(xBytes);
Buffer.BlockCopy(xBytes, 0, buff, j + 0 * sizeof(float), sizeof(float));
// y
byte[] yBytes = BitConverter.GetBytes(particlePositionsArrayForEachSegment[j].y);
Array.Reverse(yBytes);
Buffer.BlockCopy(yBytes, 0, buff, j + 1 * sizeof(float), sizeof(float));
// z
byte[] zBytes = BitConverter.GetBytes(particlePositionsArrayForEachSegment[j].z);
Array.Reverse(zBytes);
Buffer.BlockCopy(zBytes, 0, buff, j + 2 * sizeof(float), sizeof(float));
}
else
{*/
Buffer.BlockCopy(BitConverter.GetBytes(particlePositionsArrayForEachSegment[j].x),
0, buff, j + 0 * sizeof(float), sizeof(float));
Buffer.BlockCopy(BitConverter.GetBytes(particlePositionsArrayForEachSegment[j].y),
0, buff, j + 1 * sizeof(float), sizeof(float));
Buffer.BlockCopy(BitConverter.GetBytes(particlePositionsArrayForEachSegment[j].z),
0, buff, j + 2 * sizeof(float), sizeof(float));
//}
}
//////////
// output
var outputParticlePositionsArrayForEachSegment = new Vector3[numPositions];
byte[] buff1 = buff;
for (int k = 0; k < outputParticlePositionsArrayForEachSegment.Length; k++)
{
Vector3 vect = Vector3.zero;
vect.x = BitConverter.ToSingle(buff1, k + 0 * sizeof(float));
vect.y = BitConverter.ToSingle(buff1, k + 1 * sizeof(float));
vect.z = BitConverter.ToSingle(buff1, k + 2 * sizeof(float));
outputParticlePositionsArrayForEachSegment[k] = vect;
}
var alleleArray = outputParticlePositionsArrayForEachSegment;
if (alleleArray != null)
for (var l = 0; l < alleleArray.Length; l++)
{
Debug.Log(alleleArray[l]);
}
}
您的问题在于复制和转换中使用的索引。对于复制和转换,它应该是(3 * j + 0)
而不是j + 0
。