請原諒我在這里忽略了一個快速修復,但我已經閱讀并完成了許多其他處理轉換float[]為byte[]和回傳的答案float[],但仍然無法弄清楚為什么我會從下面的代碼中得到意想不到的結果. 我轉換float[]到byte[]存盤在一個SQLite資料庫中的BLOB。但是,在將 my 加載byte[]到資料庫之前,我檢查以確保我可以準確地將其轉換回 a float[],但是我得到的結果與float[]我轉換的結果不匹配。我確實研究了位元組序問題并對此有所了解(在下面注釋掉了),但結果雖然不同,但仍然出乎意料。任何朝著正確方向輕推都會受到贊賞 - 這對我來說是新的領域。謝謝!
5個vector3的測驗陣列應該分別讀取:(1,2,3)而不是我得到:(0,1,2),(0,0,0),(0,0,0),(0,0, 2), (1,2,3)
//////////
// 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]);
}
}
uj5u.com熱心網友回復:
您的問題在于復制和轉換中使用的索引。它應該(3 * j 0)代替j 0復制和轉換。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409449.html
標籤:
下一篇:UnityC#匯入本地包
