如何将Base64字符串转换为float数组或int数组?

时间:2015-02-05 21:33:57

标签: c# linq base64

我有一些代码可以将float[]转换为Base64字符串:

float[] f_elements = <from elsewhere in my code>;
byte[] f_vfeat = f_elements.SelectMany(value => BitConverter.GetBytes(value)).ToArray();
string f_sig = Convert.ToBase64String(f_vfeat);

我还有 - 基本上 - 将int[]转换为Base64字符串的相同代码:

int[] i_elements = <from elsewhere in my code>;
byte[] i_feat = i_elements.SelectMany(value => BitConverter.GetBytes(value)).ToArray();
string i_sig = Convert.ToBase64String(i_feat);

这两个字符串都按预期生成Base64个字符串。但是,现在我需要解码回数组,我遇到了麻烦。

如何从我的Base64字符串中获取并获取原始数据数组。在解码Base64字符串之前,我会知道它是假设是int[]还是float[],所以我认为这会有所帮助。

有谁知道如何从Base64字符串转到float[]int[]

2 个答案:

答案 0 :(得分:1)

您可以使用BitConverter.ToInt32BitConverter.ToSingle转换数组的一部分:

byte[] bytes = Convert.FromBase64String();
int[] ints = new int[bytes.Length / 4];
for (int i = 0; i < ints.Length; i++)
{
    ints[i] = BitConverter.ToInt32(bytes, i * 4);
}

(当然,等同于ToSingle。)

在我看来,遗憾的是GetBytes没有重载将字节直接写入现有数组,而不是在每次调用时创建一个新数组......

答案 1 :(得分:0)

Convert.FromBase64String有问题吗?

byte[] i_feat = Convert.FromBase64String(i_sig)