首页 > 解决方案 > Powershell Format-Hex 不显示行尾。为什么?

问题描述

我看不到任何行尾字节

echo "hello" | Format-Hex -Raw -Encoding Ascii

有没有办法向他们展示?

编辑:我也有一个显示相同行为的文件,这个文件包含多行,正如 cat 和 notepad 所确认的那样。

PS C:\dev\cur CMR-27473_AMI_not_stopping_in_ecat_fault 97984 > cat .\x.txt
helo
helo2
PS C:\dev\cur CMR-27473_AMI_not_stopping_in_ecat_fault 97984 > Get-Content .\x.txt | Format-Hex -Raw


           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   68 65 6C 6F                                      helo


           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   68 65 6C 6F 32                                   helo2

我确实看到了这两个记录。但我想查看行尾字符,即原始字节内容。

标签: powershellnewline

解决方案


如果您的意思是newline,则源字符串中没有一个。因此,Format-Hex不会显示一个。

Windows 使用 CR LF 序列 (0x0a, 0x0d) 换行。要查看控制字符,请将换行符附加到字符串中。像这样,

"hello"+[environment]::newline | Format-Hex -Raw -Encoding Ascii


           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000   68 65 6C 6C 6F 0D 0A                             hello..

也可以使用 Powershell 的反引号转义序列:"hello`r`n"达到与 appending 相同的效果[Environment]::NewLine,尽管只有后者是平台感知的

根据评论和编辑的附录:

PowershellGet-Content正在努力变得聪明。在大多数用例[需要引用]中,从文本文件中读取的数据不需要包含换行符。Get-Content 将填充一个数组,从文件中读取的每一行都将位于其自己的元素中。换行符有什么用?

当输出被重定向到文件时,Powershell 正在尝试再次变得聪明。在大多数用例[需要引用]中,将文本添加到文本文件中意味着添加新的数据行。不附加现有的一行。实际上有一个单独的开关用于防止换行:Add-Content -NoNewLine.

更重要的是,高级语言没有特定的字符串终止字符。当有一个字符串对象时,就像现代语言一样,字符串的长度被存储为字符串对象的一个​​属性。

在低级语言中,没有字符串的概念。这只是一堆塞在一起的角色。那么,如何知道“字符串”从哪里开始和结束呢?Pascal 的方法是在开头分配字节以包含实际的字符串数据长度。C 使用以空字符结尾的字符串。在 DOS 中,汇编程序使用以美元结尾的字符串。


推荐阅读