我正在使用 Windows 10 计算器的程序员模式将十六进制转换为十进制。问题是计算器默认为有符号的。
设置为:DWORD
十六进制:A08A 5A52
结果:
十二月:-1601545646
我如何将其设置为无符号值?我发现如果我使用较大的内存值并将其设置为 QWORD,则可以获得无符号值,但如果使用无符号的 32 位值,则会遇到问题。
答案1
我如何将其设置为给出无符号的值?
在 Windows 计算器中,二进制文件以有符号的 2 的补码表示。因此,Windows 计算器不支持无符号的二进制值。
我建议根据您的需要使用不同的计算器程序。
答案2
改用 PowerShell。只需输入0xA08A5A52L
,结果就会以十进制形式打印出来。如果你有PowerShell 6.2 或更高版本您也可以使用0xA08A5A52UL
。L
和UL
后缀分别表示.NET 中的long
和类型ulong
目前,Windows 计算器无法处理无符号值,因此您必须使用更宽的类型,即用于 DWORD 值的 QWORD。只有在处理无符号的 64 位值时才会遇到问题。对于 0xA08A5A52,如果您在 DWORD 模式下操作,则需要更改为 QWORD 模式,然后AND
对 0xFFFFFFFF 进行按位运算以清除高位,以正确获取无符号值 2693421650
离题了,但事实上,如果你想要一个程序员用的计算器,那么 PowerShell 会更合适,因为它比计算器更通用、更强大。我将展示更多有关如何使用 PowerShell 实现此目的的示例。对于在 .NET(以及固有的 PowerShell)中进行数学运算,存在从低级到高级的数学函数,主要来自.NET 数学类和数字命名空间。您将把类 .NET 类型放入 中[]
,例如[math]
或[system.math]
代表Math
类(PowerShell 不区分大小写)。除此之外,还有一些其他可能对程序员有用的东西:
按位运算(除移位运算符外,按位运算符均以 开头
-b
)[uint64]::MaxValue/3 + (-bnot 20) + (1L -shl 22) + (0x23 -band 0x34)
大整数数学:
[bigint]::Pow([uint64]::MaxValue, 20)
任意整数和浮点数学表达式
1.56 + 0.23/[math]::Pow([math]::Sqrt([math]::Log(20) + [math]::Sin([math]::PI/3)), 4)
数学十进制类型(128 位):
1.23d * 3.45d / 28
计算文件或对象大小:使用
12.5GB + 5.8MB + 1392KB
二进制单位和12.5e9 + 5.8e6 + 1392e3
十进制单位的数字后缀(G = 1e9,M = 1e6,K = 1e3)转换为/从 base64 转换:
[Convert]::ToBase64String
和[Convert]::FromBase64String
约会时间操作。例如,将原始 Epoch 值转换为日期时间,反之亦然
[datetime]::FromFileTime(0x01d15614cbaee92c) [datetime]::ParseExact("08-12-2012","dd-MM-yyyy", ` [Globalization.CultureInfo]::InvariantCulture)
字符串格式化和进制转换。
String.Format
.NET 支持将起作用。有关更多信息,请阅读格式化运算符。您还可以进行高级字符串和正则表达式操作。以下是一些示例:'somestring'.Substring(4) * 3 -replace 'ings', 'eet' '{0:X}' -f (0x12 + 34) [convert]::ToString(0x12 + 34, 16) 'This is an emoji' + [char]::ConvertFromUtf32(0x1F60A)
直接调用*.SO/*.DLL文件中的函数
GUI 编程。以下是小示例剪贴板历史记录应用
更多信息请阅读