我需要一种方法来获取python中字符串的二进制表示.例如
st = "hello world"
toBinary(st)
Run Code Online (Sandbox Code Playgroud)
有一个简洁的方法来做这个吗?
我需要将ASCII字符串转换为位列表,反之亦然:
str = "Hi" -> [0,1,0,0,1,0,0,0,0,1,1,0,1,0,0,1]
[0,1,0,0,1,0,0,0,0,1,1,0,1,0,0,1] -> "Hi"
Run Code Online (Sandbox Code Playgroud) 是否有一种简单的方法可以将一些str/unicode对象表示为一个大二进制数(或十六进制数)?
我一直在阅读相关问题的一些答案,但没有一个适用于我的场景.
我尝试使用STL中的struct模块,但它没有按预期工作.Chars,就像在二进制文件中一样,显示为好的字符.
我在尝试一些不可能的事吗
例:
def strbin(inp):
# sorcery!
return out
>> print strbin("hello")
# Any of these is cool (outputs are random keystrokes)
0b1001010101010000111001110001...
0xad9f...
Run Code Online (Sandbox Code Playgroud) 我在字符串中有一个十六进制值
h = '00112233aabbccddee'
Run Code Online (Sandbox Code Playgroud)
我知道我可以将其转换为二进制:
h = bin(int(h, 16))[2:]
Run Code Online (Sandbox Code Playgroud)
然而,这失去了领先的0.反正有没有失去0的转换呢?或者最好的方法是在转换之前计算前导0的数量,然后再添加它.
我想读取文件的原始二进制文件并将其放入字符串中.目前我打开一个带有"rb"标志的文件并打印字节,但它会以ASCII字符形式出现(对于文本来说,对于视频和音频文件,它会给出符号和乱码).如果可能的话,我想获得原始的0和1.这需要适用于音频和视频文件,因此简单地将ascii转换为二进制文件不是一种选择.
file = open(filePath, "rb")
with file:
byte = file.read(1)
print byte
Run Code Online (Sandbox Code Playgroud) 尽管存在许多相关问题,但我找不到任何与我的问题相符的问题.我想将二进制字符串(例如"0110100001101001"
)更改为字节数组(相同的示例b"hi"
).
我试过这个:
bytes([int(i) for i in "0110100001101001"])
Run Code Online (Sandbox Code Playgroud)
但我得到了:
b'\x00\x01\x01\x00\x01' #... and so on
Run Code Online (Sandbox Code Playgroud)
在Python 3中执行此操作的正确方法是什么?
我做了一个小python程序,从文件读取二进制文件并将其存储到文本文件,读取文本文件并存储二进制文件.但是,我无法让二进制文件工作......它读取这样的文件:
f_bin = open(bin_file,"rb")
to_bin_data = f_bin.read()
bin_data = bin(reduce(lambda x, y: 256*x+y, (ord(c) for c in to_bin_data), 0))
f_bin.close()
Run Code Online (Sandbox Code Playgroud)
这个对我不起作用... 将二进制转换为ASCII,反之亦然
像这样的网页:http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/Binary_To_Text.asp
编辑:我现在为它做了一个很长的if else脚本,但感谢你的答案
我正在尝试在 Python 3.x 中将位字符串转换为字节字符串。在每个字节中,位从高位到低位填充。如有必要,最后一个字节用零填充。位串最初存储为布尔值或整数(0 或 1)的“集合”,我想返回 0-255 范围内整数的“集合”。通过集合,我的意思是一个列表或一个类似的对象,而不是一个字符串:例如,下面的函数返回一个生成器。
到目前为止,我能得到的最快的是以下内容:
def bitsToBytes(a):
s = i = 0
for x in a:
s += s + x
i += 1
if i == 8:
yield s
s = i = 0
if i > 0:
yield s << (8 - i)
Run Code Online (Sandbox Code Playgroud)
我尝试了几种替代方法:使用枚举,构建列表而不是生成器,通过“(s << 1) | x”而不是总和来计算 s,一切似乎都慢了一点。由于此解决方案也是我发现的最短和最简单的解决方案之一,因此我对此感到非常满意。
但是,我想知道是否有更快的解决方案。特别是,是否有一个库例程可以更快地完成工作,最好是在标准库中?
示例输入/输出
[] -> []
[1] -> [128]
[1,1] -> [192]
[1,0,0,0,0,0,0,0,1] -> [128,128]
Run Code Online (Sandbox Code Playgroud)
在这里,我展示了带有列表的示例。发电机应该没问题。但是,字符串不会,然后有必要在类似列表的数据和字符串之间来回转换。
我在网上搜索了很多次,但我找不到转换二进制字符串变量X的方法
X = "1000100100010110001101000001101010110011001010100"
Run Code Online (Sandbox Code Playgroud)
转换为UTF-8字符串值.
我发现有些人正在使用诸如此类的方法
b'message'.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
但是,这种方法对我没用,因为'b'据说是不存在的,我不知道如何用变量替换'message'.不仅如此,我还无法理解这种方法的工作原理.还有更好的选择吗?
那我怎么能把二进制字符串转换成文本字符串呢?
编辑:我也不介意ASCII解码
澄清:这是我想要发生的事情.
def binaryToText(z):
# Some code to convert binary to text
return (something here);
X="0110100001101001"
print binaryToText(X)
Run Code Online (Sandbox Code Playgroud)
这将产生字符串......
hi
Run Code Online (Sandbox Code Playgroud)
谢谢,丹尼尔
我想使用Python 3将文件的确切顺序从文件中提取到字符串中.关于这个主题的几个问题很接近,但是并没有完全回答它.到目前为止,我有这个:
>>> data = open('file.bin', 'rb').read()
>>> data
'\xa1\xa7\xda4\x86G\xa0!e\xab7M\xce\xd4\xf9\x0e\x99\xce\xe94Y3\x1d\xb7\xa3d\xf9\x92\xd9\xa8\xca\x05\x0f$\xb3\xcd*\xbfT\xbb\x8d\x801\xfanX\x1e\xb4^\xa7l\xe3=\xaf\x89\x86\xaf\x0e8\xeeL\xcd|*5\xf16\xe4\xf6a\xf5\xc4\xf5\xb0\xfc;\xf3\xb5\xb3/\x9a5\xee+\xc5^\xf5\xfe\xaf]\xf7.X\x81\xf3\x14\xe9\x9fK\xf6d\xefK\x8e\xff\x00\x9a>\xe7\xea\xc8\x1b\xc1\x8c\xff\x00D>\xb8\xff\x00\x9c9...'
>>> bin(data[:][0])
'0b11111111'
Run Code Online (Sandbox Code Playgroud)
好的,我可以得到一个基数为2的数字,但我不明白为什么数据[:] [x],我仍然有前导0b.似乎我必须遍历整个字符串并进行一些转换和解析以获得正确的输出.有没有更简单的方法来获取01的序列而不需要循环,解析和连接字符串?
提前致谢!
python ×10
binary ×8
python-3.x ×5
python-2.7 ×2
string ×2
ascii ×1
bytearray ×1
file-io ×1
hex ×1
optimization ×1
text ×1
unicode ×1