此处将为大家介绍关于在Python3中将二进制字符串转换为字节数组的详细内容,并且为您解答有关python二进制字符串怎么变成整数的相关问题,此外,我们还将为您介绍关于java–将二进制字符串转换为二
此处将为大家介绍关于在Python 3中将二进制字符串转换为字节数组的详细内容,并且为您解答有关python二进制字符串怎么变成整数的相关问题,此外,我们还将为您介绍关于java – 将二进制字符串转换为二进制、Java:将二进制字符串转换为十六进制字符串、python – 使用PIL将二进制字符串转换为图像、Python将字符串数组转换为字节数组的有用信息。
本文目录一览:- 在Python 3中将二进制字符串转换为字节数组(python二进制字符串怎么变成整数)
- java – 将二进制字符串转换为二进制
- Java:将二进制字符串转换为十六进制字符串
- python – 使用PIL将二进制字符串转换为图像
- Python将字符串数组转换为字节数组
在Python 3中将二进制字符串转换为字节数组(python二进制字符串怎么变成整数)
尽管有很多相关的问题,但找不到与我的问题相符的问题。我想将二进制字符串(例如,"0110100001101001"
)更改为字节数组(相同的示例,b"hi"
)。
我尝试了这个:
bytes([int(i) for i in "0110100001101001"])
但是我得到了:
b''\x00\x01\x01\x00\x01'' #... and so on
在Python 3中执行此操作的正确方法是什么?
答案1
小编典典这是Patrick提到的第一种方法:将位串转换为int并一次取8位。这样做的自然方法是按相反的顺序生成字节。要获得字节放回我的字节组使用扩展切片标志为-1的一步正确的顺序:b[::-1]
。
def bitstring_to_bytes(s): v = int(s, 2) b = bytearray() while v: b.append(v & 0xff) v >>= 8 return bytes(b[::-1])s = "0110100001101001"print(bitstring_to_bytes(s))
显然,帕特里克的第二种方法更紧凑。:)
但是,在Python
3中有一种更好的方法:使用int.to_bytes方法:
def bitstring_to_bytes(s): return int(s, 2).to_bytes(len(s) // 8, byteorder=''big'')
java – 将二进制字符串转换为二进制
如果我有一个字符串:
字符串二进制=“0000”
我希望二进制数据为0000.
下面是我将二进制文件设置为字节数组时发生的情况(依次返回48,即ASCII)
二进制字符串:0000
二进制字节数组:48
二进制字节数组:48
二进制字节数组:48
二进制字节数组:48
我不擅长解释所以希望上面的例子足以告诉你我想要什么.
编辑:这是将数据设置为二进制文件.
解决方法
System.out.println(Integer.toBinaryString(Integer.parseInt("000",2))); // gives 0 System.out.println(Integer.toBinaryString(Integer.parseInt("010",2))); // gives 10 System.out.println(Integer.toBinaryString(Integer.parseInt("100",2))); // gives 100
Java:将二进制字符串转换为十六进制字符串
我需要将二进制字符串转换为十六进制字符串,但是我有问题。我通过这种方法将二进制字符串转换为十六进制字符串:
public static String binaryToHex(String bin){ return Long.toHexString(Long.parseLong(bin,2));}
没关系!但是我丢失了字符串左侧的零。例如:
该方法返回此:123456789ABCDEF,但我想返回此:
00000123456789ABCDEF
答案1
小编典典而不是Long.toHexString
我将使用Long.parseLong
解析值,然后String.format
以所需的宽度(在您的示例中为21)输出值:
public static String binaryToHex(String bin) { return String.format("%21X", Long.parseLong(bin,2)) ;}
python – 使用PIL将二进制字符串转换为图像
一些背景故事:
from PIL import Image value = "0110100001100101011011000110110001101111" vdiv = [value[i:i+8] for i in range(0,len(value),8)]
^这将从二进制字符串中创建一个字节列表. [‘01101000′,’01100101’,…..]
def diff(inp): if inp == ''1'': return (0,0) if inp == ''0'': return (255,255,255) else: pass
^这会返回每个相应位的颜色元组,如果我调用:
for i in vdiv: for i2 in i: print diff(i2)
它将为列出的字节中的每个位打印每个颜色元组. (0,0)(0,0)(255,255)……
我想知道的是,如何让PIL创建像素与二进制字符串匹配的图像?
这是它应该是什么样子:
到目前为止我对PIL的看法:
img = Image.new( ''RGB'',(8,len(vdiv)),"white") pixels = img.load() ## for x in range(img.size[0]): for y in range(img.size[1]): for i in vdiv: for i2 in i: pixels[x,y] = diff(i2) #Creates a black image. What do? ## img.show()
它是我在范围内的x位.我搞不清楚了.
解决方法
import Image value = "0110100001100101011011000110110001101111" cmap = {''0'': (255,255),''1'': (0,0)} data = [cmap[letter] for letter in value] img = Image.new(''RGB'',len(value)//8),"white") img.putdata(data) img.show()
如果你有NumPy,你可以使用Image.fromarray:
import Image import numpy as np value = "0110100001100101011011000110110001101111" carr = np.array([(255,(0,0)],dtype=''uint8'') data = carr[np.array(map(int,list(value)))].reshape(-1,8,3) img = Image.fromarray(data,''RGB'') img.save(''/tmp/out.png'',''PNG'')
但是这个timeit测试建议使用putdata更快:
value = "0110100001100101011011000110110001101111"*10**5 def using_fromarray(): carr = np.array([(255,dtype=''uint8'') data = carr[np.array(map(int,3) img = Image.fromarray(data,''RGB'') return img def using_putdata(): cmap = {''0'': (255,0)} data = [cmap[letter] for letter in value] img = Image.new(''RGB'',"white") img.putdata(data) return img
In [79]: %timeit using_fromarray() 1 loops,best of 3: 1.67 s per loop In [80]: %timeit using_putdata() 1 loops,best of 3: 632 ms per loop
Python将字符串数组转换为字节数组
您可以使用 int(number,2)
将字符串转换为整数:
oldlist = ["00000100","10100001","11000001","11100001"]
out = list(map(lambda x: bytes([int(x,2)]),oldlist))
print(out)
打印:
[b''\x04'',b''\xa1'',b''\xc1'',b''\xe1'']
,
你可以做的是使用string.getBytes();
您首先需要将二进制字符串转换为整数。为此,您可以使用基数为 2 的 int() 方法。然后将其转换为字节,使用 bytes() 方法,如 bytes([x])。
>>> oldlist = [''00000100'',''10100001'',''11000001'',''11100001'']
>>> list(map(lambda x: bytes([int(x,oldlist))
[b''\x04'',b''\xe1'']
今天关于在Python 3中将二进制字符串转换为字节数组和python二进制字符串怎么变成整数的介绍到此结束,谢谢您的阅读,有关java – 将二进制字符串转换为二进制、Java:将二进制字符串转换为十六进制字符串、python – 使用PIL将二进制字符串转换为图像、Python将字符串数组转换为字节数组等更多相关知识的信息可以在本站进行查询。
本文标签: