如何将4字节字符串编码为单个32位整数?

hal*_*000 2 c# python algorithm powershell

首先,免责声明.我不是CS毕业生也不是数学专业,所以简单很重要.

我有一个四字符串(例如"isoy"),我需要将其作为单个32位整数字段传递.当然在另一端,我需要将其解码回字符串.该字符串只包含AZ,如果有帮助,则大小写不重要.

有趣的是,我从发送端的PowerShell和接收端的Linux开始.我可以在那里使用Perl或Python,优先选择Python.我实际上并不需要每种语言的答案,我最感兴趣的是两种方式的PowerShell(C#也很好)的例子.

dtb*_*dtb 10

到32位无符号整数:

uint x = BitConverter.ToUInt32(Encoding.ASCII.GetBytes("isoy"), 0); // 2037347177
Run Code Online (Sandbox Code Playgroud)

要字符串:

string s = Encoding.ASCII.GetString(BitConverter.GetBytes(x));      // "isoy"
Run Code Online (Sandbox Code Playgroud)

BitConverter使用机器的本机字节序.

  • $s = "isoy"; $x = [BitConverter]::ToUInt32([Text.Encoding]::ASCII.GetBytes($s),0); $s = [Text.Encoding]::ASCII.GetString([BitConverter]::GetBytes($x)); (3认同)

Ale*_*lli 8

对于Python,struct.unpack完成这项工作(将一个4字节的字符串转换成一个int - struct.pack另一种方式):

>>> import struct
>>> struct.unpack('i', 'isoy')[0]
2037347177
>>> struct.pack('i', 2037347177)
'isoy'
>>> 
Run Code Online (Sandbox Code Playgroud)

(你可以使用不同的格式,以确保大端或小端的编码,如果你需要的是- '>i''<i'分别-而不是只是简单的'i',它使用什么编码原产于机器).