Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何访问文件中的某些字节、修改它们以及输出修改后的文件_Python_Arrays_Binary_Steganography - Fatal编程技术网

Python 如何访问文件中的某些字节、修改它们以及输出修改后的文件

Python 如何访问文件中的某些字节、修改它们以及输出修改后的文件,python,arrays,binary,steganography,Python,Arrays,Binary,Steganography,我试图访问文件中的某些字节,修改它们,然后输出修改后的文件 该文件是一个位图,但这并不重要,因为我正在使用open(file,'rb')。当我试图访问byte对象中的元素时,我会得到字母、数字和斜杠的组合。然而,当我将元素添加到列表中时,我得到的数字介于0和127之间(这就是我要寻找的) 然后,问题是修改它们并将其更改回我最初从byte对象访问的格式。我一直想弄清楚它是什么,但似乎找不到我要找的那部分 我的计划是从文件的开头取一个切片,进行更改,然后附加未触及的切片,并使用write(file,

我试图访问文件中的某些字节,修改它们,然后输出修改后的文件


该文件是一个位图,但这并不重要,因为我正在使用
open(file,'rb')
。当我试图访问byte对象中的元素时,我会得到字母、数字和斜杠的组合。然而,当我将元素添加到列表中时,我得到的数字介于0和127之间(这就是我要寻找的)

然后,问题是修改它们并将其更改回我最初从byte对象访问的格式。我一直想弄清楚它是什么,但似乎找不到我要找的那部分

我的计划是从文件的开头取一个切片,进行更改,然后附加未触及的切片,并使用
write(file,'wb')
输出文件

有什么建议吗?我希望有一个简单的铸造方法,我只是不知道我铸造什么

在某些情况下,我试图用LSB编写一个隐写术的实现。这一点是唯一的障碍,因为我想我已经解决了所有其他问题。这是大学作业,我必须在没有图书馆的情况下完成(枕头除外,我想我不需要)

顺便说一句,我正在使用
workingSlice=imageBytes[:length]
endSlice=imageBytes[length://code>对文件进行切片,这似乎在快速测试后可以正常工作<代码>长度
将由隐藏消息的长度(加上标题)定义

我编写了一些代码来测试这一点:

length = 10
with open("TestBMP.bmp", "rb") as image:
    imbytes = image.read()
    workingSlice = imbytes[:length]
    endSlice = imbytes[length:]
    print(workingSlice)
    byteList = []
    for i in workingSlice:
        byteList += [i]
    print(byteList)
    stringout = b""
    for i in byteList:
        stringout += bytes(i)
    print(stringout)
输出:

b'BM6\x00\x03\x00\x00\x00\x00\x00'

[66, 77, 54, 0, 3, 0, 0, 0, 0, 0]

b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

你应该在你的问题中添加更多的细节,这样他们都在一个地方,人们不必阅读评论就能理解你的问题。访问bytearray中的元素并将其转换为列表中的整数本质上是一样的。在第一种情况下,可以看到字节的字符串表示形式。在第二种情况下,实际整数值被放入列表中。您应该能够在适当的位置更改bytearray,并使用
open(file,'wb')
将其写回文件。也许您可以通过包含代码来提高问题的清晰度?记住要包括您期望发生的事情、实际发生的事情以及完整的错误消息(如果有的话)?谢谢,我自己并没有将它们转换为整数,所以似乎在某个时候发生了这种情况。我将添加一些代码,“但这并不重要,因为我使用的是open(file,'rb')”。哦,但确实如此。使用位图基本上是可以的,因为在一堆头字节之后,就有了图像本身的像素。但以png或jpeg为例,它们对数据的编码方式截然不同。这些字节流都不能代表实际的像素是什么,如果你改变一个字节,就会破坏整个图像。