字节流简述

字节简述

字节概述

字节(byte)是计算机用于计量存储容量的一中计量单位。B(字节)KB(千字节)

无论网络上两个终端需要传输什么数据,都需要传输二进制bit的数据。

既然传输的都是bit 为什么不把变量转化为bit类型。

原因是大部分的电脑的内存最小单位是8bit 所以无论传输什么类型的变量都要吧变量的数据转换为字节数据。

计算机能存储的唯一东西就是bytes(因为字节是电脑中表示信息的最小单位) 为了在计算机中存储东西我们首先将其编码为目标格式如MP3,MP4 若想网络传输需要转化为bytes

  • byte 字节 八位 (其中每四位可以用一个16进制数来表示)一个字节可以用两个十六进制的数进行表示。字节非常适合网络传输

    b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b'
    其中 \x 表示十六进制,e 6 就是两个十六进制数
    
  • bit 代表一位 非1即0

字节串 字符串 字符集

  • bytes 由多个字节组成,操作单位为字节(八位)类似字节容器。
  • 字符串 str
  • Unicode 字符集,包括汉字,为两个字节。实际使用的utf-8,utf-16 都属于 Unicode 字符集。

转换

  • 字符串转换为字节串(按照指定的字符集进行编码即可)

    b5="你好,世界".encode('utf-8')
    print(b5)
    b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c.'
    
    
  • 字节串转字符串

    str= b5.decode("utf-8")
    

如何把numpy.arry 转换成字节用于封包传输。

  • 通常需要先进行存储图片,在读取并封包发送
import cv2
img_path = "/home/hqt/Desktop/DeepinScreenshot_select-area_20221126233252.png"
# 打开图片文件获取二进制数据 rb 表示二进制按字节解释。
with open(img_path,"rb") as f:
    #读取图片的二进制数据
    bin_contents = f.read() 
   
result = requests.post('http://192.168.110.71:8080/', params={'threshold': 0.1},
                       data=bin_contents).json()
  • 直接在内存中转成字节封包处理。

    image=cv2.imread(img_path)
    success,encode_image=cv2.imencode(".jpg",image)#### 很重要 需要先进行编码
    img=encode_image.tobytes()### 可以直接发型
    with open("/home/hqt/Desktop/kk.jpg",'wb') as f:###客户端接收直接存储。
        f.write(img)
    print(img[:20])
    
  • 重点

    1 图片转字节(需要先进行按照需要的格式进行编码并转成字节串)

    img = cv2.imread(img_path)
    imgbytes = cv2.imencode(".jpg", img)[1].tobytes()
    
     2 字节转图片(read (rb))后转numpy.array 
    
#第一种方法先读取图片为字节,再转图片array 
with open(img_file, "rb") as f:
      img_data = f.read()
      img = cv2.imdecode(np.fromstring(img_data, dtype=np.uint8), 1)

#第二种方法。采用numpy的fromfile
img_path = r"test.jpg"
img = cv2.imdecode(np.fromfile(img_path, dtype=np.uint8), 1)
posted @ 2022-12-12 13:41  北流鱼  阅读(190)  评论(1编辑  收藏  举报