Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果数组正好是16个字节并且取自成功接收的UDP套接字,则新Guid(字节[])是否始终生成有效的Guid?_C#_Arrays_Sockets_Byte_Guid - Fatal编程技术网

C# 如果数组正好是16个字节并且取自成功接收的UDP套接字,则新Guid(字节[])是否始终生成有效的Guid?

C# 如果数组正好是16个字节并且取自成功接收的UDP套接字,则新Guid(字节[])是否始终生成有效的Guid?,c#,arrays,sockets,byte,guid,C#,Arrays,Sockets,Byte,Guid,试着把我的脑袋绕到字节数组上,这些字节数组是由生成的,后来在中使用 如果socket.ReceiveFrom(…)未生成异常,新Guid(数据)将永远不会失败,那么可以安全地假设吗?基本上,ReceiveFrom是否有可能生成无法生成GUI的字节数组,而不引发异常?还是必须先验证接收到的字节数组?这与数据来自何处无关。Guid如何知道数据来自套接字 任何字节都是有效的Guid,至少与Guid使用的验证规则有关。此代码永远不会抛出: if(length == 16) var guid =

试着把我的脑袋绕到字节数组上,这些字节数组是由生成的,后来在中使用


如果
socket.ReceiveFrom(…)
未生成异常,
新Guid(数据)
将永远不会失败,那么可以安全地假设吗?基本上,ReceiveFrom是否有可能生成无法生成GUI的字节数组,而不引发异常?还是必须先验证接收到的字节数组?

这与数据来自何处无关。
Guid
如何知道数据来自套接字

任何字节都是有效的Guid,至少与
Guid
使用的验证规则有关。此代码永远不会抛出:

if(length == 16)
    var guid = new Guid(data);

我相信Guid确实有一些符合Guid标准的结构,但代码几乎从未使用过这种结构。它没有实际影响。我不知道有哪一个系统会在结构不好的GUID下出现错误行为。

场景中没有多少魔力,请检查它不会失败-但这并不意味着您将获得有效的GUID。
Guid
类不执行任何有效性检查。guid不仅仅是随机数-位有其意义(例如,版本控制)。@Luaan很好。我想这实际上是两个问题合一:它会失败吗?它会产生一个有效的guid吗?对于这种特殊情况,生成的guid将与guid.NewGuid()生成的现有有效guid的字典进行比较,如果不相等,则将被丢弃。是的,在这种情况下,您就没事了。嗯,是的,格式错误的guid更像是一个警示灯-这显然不是由正确的guid生成方法之一创建的。毕竟,GUID并没有真正解析,它们是“没有意义的密钥”。是的,我认为MAC地址方法生成GUID毫无意义和劣势。随机字节就可以了,可能在统计上更独特,因为所有这些MAC地址字节都被部分浪费了。不过,MAC地址方法实际上是唯一的——前提是你不改变NIC必须开始使用的MAC,也没有其他人这样做(它们是唯一的;除非你改变它们)。GUID的其余部分也是唯一的,尽管这也意味着GUID生成的最大速率是有限的,而且GUID也是可预测的。即便如此,“真正”的随机Guid仍然有一个版本号——正确的版本号。@Luaan老实说,我更喜欢MAC地址方法,因为它还允许我识别创建
Guid
的机器。(这在排除为什么来自机器X的所有数据总是格式不正确,而其他机器却没有这样做的故障时特别有用。)
if(length == 16)
    var guid = new Guid(data);