FromBase64String
方法面临的问题。
输入不是有效的Base-64字符串,因为它包含非base 64字符,两个以上的填充字符或填充字符中的非法字符。
尝试将-
替换为+
var bytes = Convert.FromBase64String(id);
id = "59216167-f9c0-4b1b-b1db-1babd1209f10@ABC"
预期结果是字符串应转换为等效的8位无符号整数数组。
答案 0 :(得分:2)
这不是Base64编码的字符串。这是一个向导。您可以像这样将其读入字节数组
var bytearray = new Guid("59216167-f9c0-4b1b-b1db-1babd1209f10").ToByteArray();
答案 1 :(得分:1)
输入的不是有效的Base-64字符串
出现这种错误的确切原因是因为这不是有效的Base64字符串,而是已经提到的,它是Guid
;和当时不是有效的Guid 。
首先,您可以尝试进行转换,以检查您是否还有有效的Base64
字符串。
public static bool StringIsBase64(string myString)
{
Span<byte> buffer = new Span<byte>(new byte[myString.Length]);
return Convert.TryFromBase64String(myString, buffer , out int bytesParsed);
}
现在,如果调用此函数并成功执行,那么我们将假定您确实具有有效的Base64
字符串,否则将发生转换错误。
您的呼叫现在看起来像这样:
string id = "59216167-f9c0-4b1b-b1db-1babd1209f10@ABC";
var bytes;
if (StringIsBase64(id))
{
bytes = Convert.FromBase64String(id);
}
我想解决的其他问题是,输入甚至对于Guid都无效。 GUID是128位整数(16个字节),并且该字符串无效。
您实际上会收到错误:
向导应包含32位数字和4个破折号(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
字符串末尾的字符@ABC
引起了这种情况,如果删除了这些字符,那么我们就有一个实际有效的Guid
。
答案 2 :(得分:-1)
尝试一下会有所帮助
using System;
public class Program{
public static void Main()
{
Guid gg = Guid.NewGuid();
Console.WriteLine(gg);
string ss = Encode(gg);
Console.WriteLine(ss);
Console.WriteLine(Decode(ss));
}
public static string Encode(Guid guid)
{
string encoded = Convert.ToBase64String(guid.ToByteArray());
encoded = encoded.Replace("/", "_").Replace("+", "-");
return encoded.Substring(0, 22);
}
public static Guid Decode(string value)
{
value = value.Replace("_", "/").Replace("-", "+");
byte[] buffer = Convert.FromBase64String(value + "==");
return new Guid(buffer);
}
}