我正在通过编写一个将字符串转换为二进制并再次转换为字符串的小程序来学习python中的位和字节。暂时我只有一个转换为二进制的函数。
string = 'word'
for c in word:
convertToBinary(c) #Function that converts to binary
输出:
01110111
01101111
01110010
01100100
现在我想编写一个从二进制转换为字符串的fromBinary()
函数。但是我仍然坚持如何处理超过1个字节的字符,例如'å'
。
string = 'å'
for c in word:
convertToCBinary(c)
输出:
11000011
10100101
当我的字符串包含不同长度(以字节为单位)的字符时,这就成了问题。
string ='åw'
for c in word:
convertToCBinary(c)
输出:
11000011 #first byte of 'å'
10100101 #second byte of 'å'
01110111 #w
我原以为我可以将这些字节重新组合在一起,但是我真的很困惑如何确定要加入哪些字节。如何创建一个函数来识别哪些字节一起组成一个字符?
答案 0 :(得分:1)
这并不难。当然有一个系统 - 否则没有程序可以打印或编辑像Ñáñez这样的名字......
每个字节的高位表示该字节的状态:
1)如果第7位为0,那么它只是ASCII(*0*1110111 = w
)
2)如果您在顶部找到11,那意味着更多字节跟随(以及多少):
*110*xxxxx *10*xxxxxx
*1110*xxxx *10*xxxxxx *10*xxxxxx
*11110*xxx *10*xxxxxx *10*xxxxxx *10*xxxxxx
*111110*xx *10*xxxxxx *10*xxxxxx *10*xxxxxx *10*xxxxxx
*1111110*x *10*xxxxxx *10*xxxxxx *10*xxxxxx *10*xxxxxx *10*xxxxxx
11000011 #first byte of 'å'
10100101 #second byte of 'å'
因此:
*110* means 1 byte follows:
*110*00011 *10*100101
00011 + 100101 = 000 11100101 = the unicode value for å (0x00e5)
注意:我相信你的例子中有一个问题。