我收到一个 Base64 字符串形式的 Guid。通过使用
Convert.FromBase64String(b64)
,转换运行良好,然后我尝试使用 Convert.TryFromBase64String(b64)
,但在这种情况下,该方法返回 false 并且我的字节数组保持为空
var dataString = "kADs1tnSQ+2ehpdtUAK/Jg==";
// output: d6ec0090-d2d9-ed43-9e86-976d5002bf26
Console.WriteLine(new Guid(Convert.FromBase64String(dataString)));
Span<byte> bytes = new();
bool success = Convert.TryFromBase64String(dataString, bytes, out int _);
// output: False, then FormatException
Console.WriteLine(success);
Console.WriteLine(new Guid(success ? bytes : Convert.FromHexString(dataString)));
我想我的问题是
Span
的初始化,因为如果我使用new byte[16]
,它就可以工作,但是使用固定大小16来编写它是否安全?
您应该为
bytes
提供已分配的空间,例如
// 16 bytes to store parsed GUID
byte[] bytes = new byte[16];
bool success = Convert.TryFromBase64String(dataString, bytes, out int _);