相关疑难解决方法(0)

如何在C#中生成UUID

我正在以编程方式创建.idl文件.如何以编程方式为接口和方法创建UUID.

我可以通过编程方式生成UUID吗?

.net c# com uuid visual-studio-2008

121
推荐指数
2
解决办法
13万
查看次数

为什么Guid.ToByteArray()按照它的方式排序字节?

当您ToByteArray()在.NET中调用GUID时,结果数组中的字节顺序与GUID的字符串表示形式相比不是您所期望的.例如,对于以下表示为字符串的GUID:

11223344-5566-7788-9900-aabbccddeeff
Run Code Online (Sandbox Code Playgroud)

结果ToByteArray()是这样的:

44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
Run Code Online (Sandbox Code Playgroud)

请注意,前四个字节的顺序是相反的.字节4和5也交换,字节6和7交换.但是最后的8个字节的顺序与它们在字符串中表示的顺序相同.

我知道这种情况正在发生.我想知道的是.NET为什么会这样处理它.

作为参考,您可以在此处此处看到一些关于此的讨论和混淆(不正确归因于Oracle数据库).

.net c# guid

46
推荐指数
1
解决办法
1万
查看次数

有没有办法在Java中生成与C#中生成的UUID相同的UUID?

我正在将一个C#脚本移植到Spark(Scala)中,我遇到了Scala中UUID生成与C#中GUID生成的问题.

有没有办法在Java中生成与C#中生成的UUID相同的UUID?

我通过从字符串的MD5哈希创建Guid来为数据库生成主键.最后,我想在Java/Scala中生成与C#脚本中的UUID匹配的UUID,因此使用C#实现进行散列的数据库中的现有数据不需要重新散列.

C#到端口:

String ex = "Hello World";
Console.WriteLine("String to Hash: {0}", ex);
byte[] md5 = GetMD5Hash(ex);
Console.WriteLine("Hash: {0}", BitConverter.ToString(md5));
Guid guid = new Guid(md5);
Console.WriteLine("Guid: {0}", guid);

private static byte[] GetMD5Hash(params object[] values) {
  using (MD5 md5 = MD5.Create())
    return md5.ComputeHash(Encoding.UTF8.GetBytes(s));
} 
Run Code Online (Sandbox Code Playgroud)

Scala移植代码:

val to_encode = "Hello World"
val md5hash = MessageDigest.getInstance("MD5")
 .digest(to_encode.trim().getBytes())
val md5string = md5hash.map("%02x-".format(_)).mkString
val uuid_bytes = UUID.nameUUIDFromBytes(to_encode.trim().getBytes())
printf("String to encode: %s\n", to_encode)
printf("MD5: %s\n", md5string)
printf("UUID: %s\n", uuid_bytes.toString)
Run Code Online (Sandbox Code Playgroud)

来自C#的结果

  • 要散列的字符串:Hello World
  • MD5:B1-0A-8D-B1-64-E0-75-41-05-B7-A9-9B-E7-2E-3F-E5
  • 指导:b18d0ab1-e064-41 75 …

c# java hash scala guid

8
推荐指数
1
解决办法
1198
查看次数

Java 中的 Base64 指南

我使用以下代码将 C# 中的 Guid 转换为 Base64:

var id = Guid.Parse("be9f1bb6-5c8e-407d-85a3-d5ef31f21b4d");
var base64=Convert.ToBase64String(id.ToByteArray());
Run Code Online (Sandbox Code Playgroud)

输出

thufvo5cfUCFo9XvMfIbTQ==

当我尝试使用以下命令在 Java 中执行相同操作时:

java.util.Base64.Encoder encoder=Base64.getEncoder();
UUID uuid = UUID.fromString("be9f1bb6-5c8e-407d-85a3-d5ef31f21b4d");
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
encoder.encodeToString(bb.array());
Run Code Online (Sandbox Code Playgroud)

输出不同

vp8btlyOQH2Fo9XvMfIbTQ==

我的 Java 代码做错了什么?如何才能获得与使用 C# 相同的结果?

java uuid base64

5
推荐指数
1
解决办法
1683
查看次数

标签 统计

c# ×3

.net ×2

guid ×2

java ×2

uuid ×2

base64 ×1

com ×1

hash ×1

scala ×1

visual-studio-2008 ×1