添加 1~4 个 0(bit)使得达到所要求的位数;添加了终止符后如果 bit 数不是 8 的倍数则继续添加 0 使得为 8 的倍数;如果最终的 bit 串仍然太短,则添加填充字符 11101100 00010001。
importqrcodefromqrcode.util import*defhack_put(self, num, len):ifnum==?0:num=?2?# faker length of hack_datafori inrange(len):self.put_bit(((num >>?(len?-?i -?1)) &?1)==?1)qrcode.util.BitBuffer.put=?hack_putqr=?qrcode.QRCode(2, qrcode.constants.ERROR_CORRECT_Q, mask_pattern=0)data=?"tested by InsBug".encode("utf-8")data +=?b' '?*?(22-len(data)-3)# 22 为 2-Q 的 Total Number of Data Codewords for this Version and EC Level,-3 是由于模式和长度指示器共占了 24 位,正好为 3Byte。user_data=QRData(data, MODE_8BIT_BYTE)hack_data=QRData(b'', MODE_8BIT_BYTE)qr.add_data(user_data)qr.add_data(hack_data)img=?qr.make_image()img.save("<filename>.png")
int?nBytes=?count;BitSource&?bits(*bits_);// Don't crash trying to read more bits than we have available.int?available=?bits.available();// try to repair count data if count data is invalidif(count *?8?>?available)?{count=?(available +?7?/?8);}ArrayRef<char>?bytes_(count);char*?readBytes=?&(*bytes_)[0];