arrays - PowerShell:将十六进制变量转换为单个(float32)大端变量

标签 arrays powershell hex endianness

如何将大端十六进制变量 = '0x41fe89de' 转换为 [single] (float32) 变量?

结果必须是 31,8173179626465

我只知道用[double] "0x41fe89de",得到结果1107200478

最佳答案

# Input: a string representing a number or big-endian byte sequence
# in hexadecimal form.
$hex = '0x41fe89de'

# Convert the hex input string to a byte array.
$byteArray = [byte[]] ($hex -replace '^0x' -split '(..)' -ne '' -replace '^', '0x')

# Convert from big-endian to little-endian, if necessary, by
# reversing the order of the bytes to match the platform's.
if ([BitConverter]::IsLittleEndian) {
  [Array]::Reverse($byteArray)
}

# Convert to a platform-native [single] instance.
[BitConverter]::ToSingle($byteArray, 0)

以上生成 31.81732(使用默认输出格式)。

  • 用于将十六进制字符串转换为字节数组的技术在 this answer 中进行了说明。 .

  • 字节数组到平台原生[single] 实例(System.Single)的转换是通过System.BitConverter 执行的。类。

    • 请注意,传递给 ::ToSingle() 的字节数必须与构成目标类型的字节数完全匹配;在这种情况下,需要 4 字节,因为 [single]32 位类型(4 字节倍 8 位);如有必要和适当,提供一个用 0 字节填充的数组;使用诸如 [System.Runtime.InteropServices.Marshal]::SizeOf([single] 0) 之类的表达式来确定所需的字节数。

关于arrays - PowerShell:将十六进制变量转换为单个(float32)大端变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60523514/

相关文章:

powershell - 禁用 SecretStore 密码提示以实现自动化

PowerShell:如何返回 Hyper-V 群集中的所有 VM

sql - varchar()中的十六进制字符实际上是ascii。需要解码

c - 十进制到十六进制转换 (C) 不适用于大数

Java - 使用数组查找最大和最小数字

c - 使用循环打印全局数组的内容不会产生任何输出

c - 声明多维数组 : Pointer or Array Definiton

sockets - 将 bytearray 与 socket.recv_into 一起使用

powershell - 如何使用powershell将文件中版本列表的三位小数转换为两位小数

c++ - "\x"在字符串中如何工作?