|
1楼 BBBBBBBBBB CCCCC 如果遇到同样的字符就把他压缩成一个字符,然后紧跟后面的一位存放该字符的个数.压缩成功后,还能解压缩.如何去写? |
|
|
|
- 共有12篇贴子
|
2楼 一般最流行的是用 7 位来表示长度的,第一个字节最高位标志后面的是压缩的数据还是没压缩的,置位代表后面的一个字节是要重复的部分,因为只用了 7 位,所以最长只有 127 个字节,没置位代表后面的没有压缩,直接输出,长度也是由低 7 为代表。 ----大概的伪代码---- while(!eof) { read_data(ch); if (count == 127) { buffer[0] |= 0x7F; write_buffer_to_file(buffer, 128); buffer[0] = count = 0; } count++; if (buffer[0] & 0x80) { if (ch != last_read_char) buffer[count] = last_read_char = ch; else { buffer[0] = 0x80 | count; write_buffer_to_file(buffer, count+1); buffer[0] = 0x81; count = 1; buffer[1] = last_read_char = ch; } } else { if (ch == last_read_char) buffer[0] |= ++count; else { buffer[0] = count; write_buffer_to_file(buffer, count+1); buffer[0] = 0; count = 1; buffer[1] = last_read_char = ch; } } } |
|
|
|
|
3楼 是:重复第二个字节,次数由第一个字节的低 7 为决定。 否:后面的字节连续输出,长度由第一个字节的低 7 为决定。 然后不断重复这个过程。 随便给个思路,懒得上机试了,代码自己写吧。 |
|
|
|
|
6楼 write_buffer_to_file(buffer, count+1); 应该为: write_buffer_to_file(buffer, 2); 抱歉了~~~以后再也不图快了~~ |
|
|
|
| 221.216.90.* |
8楼 http://cjhacker.bokee.com/5249118.html |
|
|
| 202.196.70.* |
9楼 |
|
|
| 222.90.90.* |
10楼 |
|
|
| 220.114.151.* |
11楼 |
|
|
| 221.1.40.* |
12楼 就是说从0开始教的? |
|
|
