将字符串转换为int会导致值更改

Jak*_*ake 4 windows powershell windows-8.1

我试图在文本文件中读取并更改Windows 8.1中Powershell中某一行上的数字值.该文件有点可预测.

我目前没有找到这种最好的方法,但我试图找出为什么会发生这种错误.我想在某个位置找到一个数字,然后读取它的整数值.

但是,当我这样做时,我得到了错误的价值.

我的代码:

$data = Get-Content "AssemblyInfo.cs"
Write-Output $data[-2]
Write-Output $data[-2][30]
Write-Output ([int]$data[-2][30])
Run Code Online (Sandbox Code Playgroud)

当前输出:

[assembly: AssemblyVersion("1.2.*")]
2
50
Run Code Online (Sandbox Code Playgroud)

预期产量:

[assembly: AssemblyVersion("1.2.*")]
2
2
Run Code Online (Sandbox Code Playgroud)

当作为int进行转换时,为什么值从2变为50?

bri*_*ist 5

这是因为$data[-2]是a [String],并且使用括号来获取a中的字符[String]不返回new [String],它返回一个[Char].

A [Char]显示为单个字符(如字符串中),但实际上是数字值.当你把它投射到[int]你时,你会看到角色的值,比如64 @.

您可以先强制转换[String],然后转换[int]为获取单个字符的数字版本,或者使用[int]::Parse():

[int][String]$data[-2][30]
# or
[int]::Parse($data[-2][30])
Run Code Online (Sandbox Code Playgroud)