我该如何将sbyte[]转换为base64字符串?

6

如何将 sbyte[] 转换为base64字符串?

我无法将该 sbyte[] 转换为 byte[],以保持与java的互操作性。


你想将它转换为base64吗?把sbyte当作byte来处理吗? - David Heffernan
2个回答

13

你肯定可以将 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);

但个人而言,我会坚持使用第一种形式。


快点,有人给我一个John Skeet的链接。开玩笑的,要尊重。 - TigOldBitties
这是有道理的,因为Convert.ToBase64String使用指针来获取二进制表示形式...而且这是一种模式... - marcelo-ferraz
@NoProblemBabe:我的意思是,Convert.ToBase64String是否使用指针都是有道理的。那只是内部实现细节。 - Jon Skeet
@NoProblemBabe:不,你说:“这是有道理的,因为Convert.ToBase64String使用指针来获取二进制表示” - 我想说的是,Convert.ToBase64String使用指针是完全无关紧要的,与我的答案是否有意义无关。 - Jon Skeet

5
class Program
{
    static void Main()
    {
        sbyte[] signedByteArray = { -2, -1, 0, 1, 2 };
        byte[] unsignedByteArray = (byte[])(Array)signedByteArray; 
        Console.WriteLine(Convert.ToBase64String(unsignedByteArray));
    }
}

抱歉,伙计,我经常使用双重转换时会收到有关不匹配数组类型的错误消息,特别是在使用nhibernate时。但还是谢谢。 - marcelo-ferraz
我看到Array类中有一个convertall方法,可以通过lambda将每个项转换。 - marcelo-ferraz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接