如何将 sbyte[]
转换为base64字符串?
我无法将该 sbyte[]
转换为 byte[]
,以保持与java的互操作性。
你肯定可以将 sbyte[]
转换为 byte[]
- 我几乎可以保证Java代码实际上将字节数组视为无符号的。 (或者换句话说:base64仅基于无符号字节定义......)
只需转换为byte[]
并调用Convert.ToBase64String
即可。 实际上,将其转换为byte[]
非常容易-尽管C#本身不提供两者之间的转换,但CLR很高兴执行引用转换,因此您只需要欺骗C#编译器:
sbyte[] x = { -1, 1 };
byte[] y = (byte[]) (object) x;
Console.WriteLine(Convert.ToBase64String(y));
如果您想要一个真正的byte[]
,您可以进行复制:
byte[] y = new byte[x.Length];
Buffer.BlockCopy(x, 0, y, 0, y.Length);
但个人而言,我会坚持使用第一种形式。
Convert.ToBase64String
使用指针是完全无关紧要的,与我的答案是否有意义无关。 - Jon Skeetclass Program
{
static void Main()
{
sbyte[] signedByteArray = { -2, -1, 0, 1, 2 };
byte[] unsignedByteArray = (byte[])(Array)signedByteArray;
Console.WriteLine(Convert.ToBase64String(unsignedByteArray));
}
}