[玩转系统] 在 PowerShell 中将字符串转换为字节数组 [3 种方法]
作者:精品下载站 日期:2024-12-14 05:29:02 浏览:13 分类:玩电脑
在 PowerShell 中将字符串转换为字节数组 [3 种方法]
使用 System.Text.Encoding 类
System.Text.Encoding
类将指定的字符串转换为 PowerShell 中的字节数组。此类可以使用特定的、默认的或自定义的编码格式。让我们看看如何使用它们。
使用具有特定编码的 System.Text.Encoding 类
使用具有特定编码的 System.Text.Encoding
类在 PowerShell 中将字符串转换为字节数组。
使用System.Text.Encoding.ASCII编码格式:
$string = "Hello World!"
$asciiEncodingObj = [System.Text.Encoding]::ASCII
$byteArray = $asciiEncodingObj.GetBytes($string)
Write-Host "Original String is: $string"
Write-Host "Byte Array is: $byteArray"
输出 :
Original String is: Hello World!
Byte Array is: 72 101 108 108 111 32 87 111 114 108 100 33
首先,我们使用 "Hello World!"
字符串初始化 $string
变量。然后,我们创建了一个 ASCII
编码对象并将其存储在 $asciiEncodingObj
变量中。请注意,::
运算符访问了 System.Text.Encoding
类的静态 ASCII
属性。
接下来,我们调用上一步中创建的 ASCII 对象 ($asciiEncodingObj
) 的 GetBytes()
方法。 GetBytes()
方法将 $string
作为参数,将其转换为字节数组并返回,我们将其存储在 $byteArray
中多变的。最后,我们使用 Write-Host
cmdlet 在 PowerShell 控制台上打印它们。此 cmdlet 用于在控制台上显示自定义输出。
现在,您应该问为什么我们使用 ASCII
编码格式。这是因为$string
中有英文以及ASCII
编码格式支持的一些特殊字符。请记住,ASCII 编码是 7 位编码,使用单个字节表示字符。这种编码用于我们只需要支持英文和一些特殊字符的地方,因为它不支持非英文字符。
我们再举一个例子,其中 $string
包含一些 ASCII
编码不支持的非英语字符;请参见以下示例。
使用System.Text.Encoding.ASCII编码格式:
$string = "Hello 世界!"
$asciiEncodingObj = [System.Text.Encoding]::ASCII
$byteArray = $asciiEncodingObj.GetBytes($string)
Write-Host "Original String is: $string"
Write-Host "Byte Array is: $byteArray"
输出 :
Original String is: Hello 世界!
Byte Array is: 72 101 108 108 111 32 63 63 33
在上面的例子中,我们用英文和非英文字符的组合来初始化$string
;例如Hello
和世界!
(英文为world!
),并使用ASCII
编码格式将$string
到字节数组。您是否注意到,我们在 PowerShell 中没有收到任何错误或异常,但返回的输出不正确;为什么?
在 PowerShell 中,您会注意到非 ASCII 字符被替换为 ?
或任何其他替换字符,并且字节数组中的 ASCII 值就是被替换字符的值,无论它是 >?
或任何其他;它不是非英语字符的 ASCII 值。我们用下面的代码来看看非英文字符的实际 ASCII 值。
查找非 ASCII 字符:
$string = "Hello 世界!"
for ($i = 0; $i -lt $string.Length; $i++) {
$character = $string[$i]
$asciiValue = [int][char]$character
if ($asciiValue -gt 127) {
Write-Host "Non-ASCII character found: $character (ASCII Value $asciiValue)"
}
}
输出 :
Non-ASCII character found: 世 (ASCII Value 19990)
Non-ASCII character found: 界 (ASCII Value 30028)
我们发现了两个非 ASCII 字符:世
和界
。
标准 ASCII 字符具有 0
到 127
ASCII 值。
如果把英文和非英文字符组合起来怎么办?我们还有其他解决方案吗?是的,我们有。我们必须使用不同的编码格式,例如 UTF-8
或 UTF-16
。让我们使用 UTF8
编码格式将 "Hello World!"
字符串转换为字节数组。请参阅以下示例。
使用System.Text.Encoding.UTF8编码格式:
$string = "Hello 世界!"
$utf8EncodingObj = [System.Text.Encoding]::UTF8
$byteArray = $utf8EncodingObj.GetBytes($string)
Write-Host "Original String is: $string"
Write-Host "Byte Array is: $byteArray"
输出 :
Original String is: Hello 世界!
Byte Array is: 72 101 108 108 111 32 228 184 150 231 149 140 33
在上面的输出中,$byteArray 中的前六个字节对应于 Hello
的 ASCII 字符(包括空格),而接下来的六个字节表示 UTF8
世界
字符的编码。如果你解码这个字节数组,你会注意到字节序列 228 184 150
对应于一个 世
字符,字节序列 231 149 140
对应于界
字符和最后一个ASCII值,33
对应于!
字符。
让我们在以下示例中一起解码 $byteArray
:
使用 UTF8 编码解码字节数组:
$string = "Hello 世界!"
$utf8EncodingObj = [System.Text.Encoding]::UTF8
$byteArray = $utf8EncodingObj.GetBytes($string)
$decodedByteArray = $utf8EncodingObj.GetString($byteArray)
Write-Host "Original String is: $string"
Write-Host "Byte Array is: $byteArray"
Write-Host "Decoded Byte Array is: $decodedByteArray"
输出 :
Original String is: Hello 世界!
Byte Array is: 72 101 108 108 111 32 228 184 150 231 149 140 33
Decoded Byte Array is: Hello 世界!
使用具有 Default
编码的 System.Text.Encoding
类
在 PowerShell 中使用 System.Text.Encoding
类和 Default
编码将字符串转换为字节数组。
使用System.Text.Encoding.Default编码格式:
$string = "Hello World!"
$defaultEncodingObj = [System.Text.Encoding]::Default
$byteArray = $defaultEncodingObj.GetBytes($string)
Write-Host "Original String is: $string"
Write-Host "Byte Array is: $byteArray"
输出 :
Original String is: Hello World!
Byte Array is: 72 101 108 108 111 32 87 111 114 108 100 33
这次,我们使用当前操作系统的Default
编码格式,在PowerShell中将$string
转换为字节数组。此编码类型可能因区域设置和操作系统而异。大多数情况下,默认编码是 UTF8
或 ANSI
代码页的某些变体,例如 Windows 系统上的 Windows-1252。
如果使用非 ASCII 字符,Default
编码是不够的;在这种情况下,使用 UTF8
或 UTF16
将有利于正确编码字符。
使用具有自定义编码的 System.Text.Encoding
类
使用具有自定义编码的 System.Text.Encoding
类在 PowerShell 中将字符串转换为字节数组。
使用自定义编码格式:
$string = "Hello World!"
$asciiEncodingObj = [System.Text.Encoding]::GetEncoding("ISO-8859-1")
$byteArray = $asciiEncodingObj.GetBytes($string)
Write-Host "Original String is: $byteArray"
Write-Host "Byte Array is: $byteArray"
输出 :
Original String is: Hello World!
Byte Array is: 72 101 108 108 111 32 87 111 114 108 100 33
此代码示例与前面的代码示例类似,但允许我们通过 GetEncoding()
方法使用自定义编码。我们将 ISO-8859-1
编码格式指定为 GetEncoding()
方法的参数以供进一步使用;您可以根据您的项目需求提及任何内容。
使用 $byteArray.GetType()
获取字节数组的数据类型。不要忘记将 $byteArray
变量替换为字节数组变量名称。
到目前为止,我们使用了各种编码格式来转换字符串,但为什么它们很重要?我们出于多种原因将字符串转换为字节数组,包括数据传输、加密、散列和操作二进制数据。这里还有一个重要的点;如果必须以文本格式发送字节数组及其等效的加密数据该怎么办。在这种情况下,我们可以使用以下代码将字节数组转换为哈希(String->ByteArray->Hash->Base64)
获取字节数组的哈希值:
$string = "Hello World!"
$asciiEncodingObj = [System.Text.Encoding]::ASCII
$byteArray = $asciiEncodingObj.GetBytes($string)
$sha = New-Object System.Security.Cryptography.SHA1CryptoServiceProvider
$result = $sha.ComputeHash($byteArray)
$result = [System.Convert]::ToBase64String($result1)
Write-Host "Original String is: $string"
Write-Host "Byte Array is: $byteArray"
Write-Host "Byte Array in Text Form: $result"
输出 :
Original String is: Hello World!
Byte Array is: 72 101 108 108 111 32 87 111 114 108 100 33
Byte Array in Text Form: Lve95gjOVATpfV8EL5X4nxwjKHE=
获得 $byteArray
后,我们使用 New-Object
cmdlet 创建 SHA1CryptoServiceProvider
的新对象,并将其引用存储在 $sha
变量。然后,我们使用 $sha
变量访问 ComputeHash()
函数,该函数将 $byteArray
作为参数并返回$byteArray
。
我们将此哈希值保存在 $result
变量中,并将其与 Convert
类的 ToBase64String()
方法链接起来以转换 $result
为 Base64 编码的字符串。请注意,我们使用 ToBase64String()
方法返回的值更新了 $result
的值。最后,我们使用 Write-Host
cmdlet 在 PowerShell 控制台上打印自定义输出。
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag