将 GUID 转换为整数 Powershell?

问题描述 投票:0回答:3

我有一个网络服务,它告诉我这是函数参数..

    Public Function Create(ByVal Name As String, ByVal templateId As Integer) 

问题是 templateid 是 GUID。如果我将其传递给函数,该函数将无法工作,因为它需要是一个整数。我可以肯定地说 templateid 是来自 SQL 数据库的 GUID。

那么我怎样才能将该 GUID 更改为整数以便该函数能够接受它呢?有可能吗?

所有解析测试都返回错误,这意味着这是不可能的。

integer guid
3个回答
1
投票

我从函数定义中假设它是 Visual Basic,其中

Integer
类型是 32 位有符号整数。即使它是 64 位无符号整数,
[guid]
也是 128 位,因此它的值无法放入
Integer


1
投票

使用传统方法无法将 GUID“转换”为整数。您可以根据您自己的规范创建一些特殊的算法来执行转换,但对此没有标准。

我看到了几个选项,但没有有关该场景的更多详细信息:

  1. 修改函数以接受 GUID 作为字符串
  2. 修改 SQL 数据库以分别将唯一标识符作为整数 GUID。 (不理想)

1
投票

C# 和 PowerShell 都将 GUID 表示为 128 位带连字符的十六进制数字。

强调它们是十六进制数字很重要,因为其他答案会让您相信它们只是字母数字。造成这种误解的原因是有关 C# GUID 的文档没有明确说明它们是

但是,稍加挖掘,您就会发现 GUID 的 constructorToString() 方法可以做到这一点。

现在,第二个问题是 GUID 是 128 位。在编写其他答案时,.NET 的最大整数值为 64 位。 在 .NET 7.0 中,情况不再如此 - 现在支持 128 位整数

因此,为了回答您的问题,您可以通过删除连字符并像这样解析它,将 GUID 转换为 PowerShell 7.0 中的 Int128:

# C# API:
# static long System.Int128.Parse(string s, System.Globalization.NumberStyles style)
#
# Relevant NumberStyles Value in PowerShell:
# [System.Globalization.NumberStyles]::HexNumber = 515

[Int128]::Parse( ((New-Guid) -replace "-", ""), 515 )
© www.soinside.com 2019 - 2024. All rights reserved.