字符集包含1和2个字节的字符。一个字节字符的第一位为0。你刚才 继续在缓冲区中累积字符。假设在某个时刻用户键入退格,如何 你能否有效地删除角色。
在我看来,一个解决方案是没有必要考虑一个字节字符(它有0作为最高有效位)并且只需要考虑2个字节字符以及它如何与1个字节区分开来我认为要包含和额外的位(比如说0)到2字节的字符来区分它,但这会占用很多字符表示。提出一个想法!
答案 0 :(得分:1)
你是什么意思第一位?
在2个八位字节值0xfade
( 0b1111101011011110
)中,第一位是0
还是1
?
无论如何,您可以安排以little-endian或big-endian格式写入值,以使“first bit”始终写在最后。通过仅检查写入的最后一个八位字节,您知道是否删除1或2个八位字节。
答案 1 :(得分:0)
听起来有点像家庭作业,但是......
如果你在缓冲区中累积它们,那么“退格”只意味着将写指针向后移动到缓冲区中(并且可能在新的写入头处写入NUL)。一个非常简单的实现是:
On backspace:
Move write pointer back one byte
If MSB != 0:
Move write pointer back one byte
Write NUL at current position
这是你在找什么?
答案 2 :(得分:0)
不要组成自己的字符集或编码;使用UTF-8。然后很容易在写指针之前找到字符的开头(它是最近的八位字节,其两个最高位不是0x10)。记住,然后字符可以更长而不是两个八位字节,但这仍然是必要的;有超过65,792个字符。