「データー圧縮」の編集履歴(バックアップ)一覧はこちら

データー圧縮」(2010/12/01 (水) 22:46:11) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

#asciiart(blockquote){ 'データー圧縮 ' Function Encode(src As *Byte, srclen As DWord, dst As *Byte) As DWord Dim i As DWord, j As DWord, k As DWord While i < srclen dst[j] = src[i] k = 0 While src[i] = dst[j] If k = 255 Or i > srclen Then Exit While k=k+1 i=i+1 Wend j=j+1 dst[j] = k j=j+1 Wend Encode = j End Function Function Decode(src As *Byte, srclen As DWord, dst As *Byte) As DWord Dim i As DWord, j As DWord, k As DWord While i < srclen dst[j] = src[i] For k=0 To src[i+1]-1 dst[j+k]=src[i] Next i=i+2 j=j+k Wend Decode = j End Function Function RleStr(src As *Byte, srclen As DWord) As String Dim s As String Dim i As DWord For i=0 To srclen-1 Step 2 s = s + Chr$(src[i]) + "[" + Str$(src[i+1]) + "]" Next RleStr = s End Function #N88BASIC Dim isrc[100] As *Byte Dim idst[200] As *Byte Dim idst2[100] As *Byte Dim isrclen As DWord Dim idstlen As DWord Dim idst2len As DWord lstrcpy(isrc, "AAAAAAAADDDDDDEEEECBBBBBBBBBCCCC") isrclen = lstrlen(isrc) idstlen = Encode(isrc, isrclen, idst) Print "変換前=";MakeStr(isrc) Print "変換後=";RleStr(idst, idstlen) Print lstrlen(isrc);"→";idstlen;"(";idstlen/isrclen*100;"%)" ZeroMemory(isrc, 100) idst2len = Decode(idst, idstlen, idst2) Print "復 元=";MakeStr(idst2) Print idstlen;"→";idst2len;"(";idst2len/idstlen*100;"%)"
'データー圧縮 ' Function Encode(src As *Byte, srclen As DWord, dst As *Byte) As DWord Dim i As DWord, j As DWord, k As DWord While i < srclen dst[j] = src[i] k = 0 While src[i] = dst[j] If k = 255 Or i > srclen Then Exit While k=k+1 i=i+1 Wend j=j+1 dst[j] = k j=j+1 Wend Encode = j End Function Function Decode(src As *Byte, srclen As DWord, dst As *Byte) As DWord Dim i As DWord, j As DWord, k As DWord While i < srclen dst[j] = src[i] For k=0 To src[i+1]-1 dst[j+k]=src[i] Next i=i+2 j=j+k Wend Decode = j End Function Function RleStr(src As *Byte, srclen As DWord) As String Dim s As String Dim i As DWord For i=0 To srclen-1 Step 2 s = s + Chr$(src[i]) + "[" + Str$(src[i+1]) + "]" Next RleStr = s End Function #N88BASIC Dim isrc[100] As *Byte Dim idst[200] As *Byte Dim idst2[100] As *Byte Dim isrclen As DWord Dim idstlen As DWord Dim idst2len As DWord lstrcpy(isrc, "AAAAAAAADDDDDDEEEECBBBBBBBBBCCCC") isrclen = lstrlen(isrc) idstlen = Encode(isrc, isrclen, idst) Print "変換前=";MakeStr(isrc) Print "変換後=";RleStr(idst, idstlen) Print lstrlen(isrc);"→";idstlen;"(";idstlen/isrclen*100;"%)" ZeroMemory(isrc, 100) idst2len = Decode(idst, idstlen, idst2) Print "復 元=";MakeStr(idst2) Print idstlen;"→";idst2len;"(";idst2len/idstlen*100;"%)"

表示オプション

横に並べて表示:
変化行の前後のみ表示: