HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0720
sirouHSP用のモジュールにならないでしょうか2解決


sirou

リンク

2022/7/20(Wed) 11:06:52|NO.96831

下記に示すものは、文字列を「CRC32」の値に変換するもので「VBScript」で書かれたソースです。
これをHSP用のモジュールに書き換えできないでしょうか。
よろしくお願いいたします。

pre
vbs_crc32.vbs
Dim CrcTableInit
Dim CRCTable(255)

MsgBox Hex(calcCRC32("GetProcAddress"))
Wscript.Quit

Function calcCRC32(TextStr)
Dim i, crc
If CrcTableInit = False Then Call Init_CRCTable
crc = -1
For i = 1 To Len(TextStr)
crc = (((crc And &HFFFFFF00) \ &H100) And &HFFFFFF) Xor (CRCTable((crc And &HFF) Xor Asc(Mid(TextStr, i, 1))))
Next
crc = crc Xor &HFFFFFFFF
calcCRC32 = crc
End Function
Sub Init_CRCTable()
Dim i, j, Limit, crc
Limit = &HEDB88320
For i = 0 To 255
crc = i
For j = 0 To 7
If crc And 1 Then
crc = (((crc And &HFFFFFFFE) \ 2) And &H7FFFFFFF) Xor Limit
Else
crc = ((crc And &HFFFFFFFE) \ 2) And &H7FFFFFFF
End If
Next
CRCTable(i) = crc
Next
CrcTableInit = True
End Sub
/pre



この記事に返信する


沢渡

リンク

2022/7/20(Wed) 12:14:38|NO.96832

VBのことはよく知らないので調べながらやりましたが、このような形でどうでしょうか。
CRC32のこともよく知らないので元のコードをそのままコンバートしただけですが、
一応コード内のコメントで記したURLにあるツールで確認は行っています。

#module #const lim 0xEDB88320 #deffunc Init_CRCTable dim CRCTable,256 repeat 256 crc=cnt repeat 8 crc=(crc>>1)&0x7FFFFFFF^(crc&1)*lim loop CRCTable(cnt)=crc loop CrcTableInit=1 return #defcfunc calcCRC32 str _s,local s if CrcTableInit=0 : Init_CRCTable s=_s : crc=-1 repeat strlen(s) crc=(crc>>8) & 0xFFFFFF ^ CRCTable(crc&0xFF^peek(s,cnt)) loop return crc^0xFFFFFFFF #global //以下、実行例 //https://lazesoftware.com/tool/strgen/ //↑での実行結果と一致していることを確認。 #include "hsp3utf.as" //←日本語文字列の実行結果を上のサイトと一致させるために文字コードをUTF-8にしています。 //UTF-8を使わないのなら削除して構いません。 mes strf("%010u",calcCRC32("123456789")) mes strf("%010u",calcCRC32("hogehoge")) mes strf("%010u",calcCRC32("あいうえお")) mes strf("%010u",calcCRC32("東京特許許可局"))



sirou

リンク

2022/7/21(Thu) 08:10:24|NO.96835

遅くなりましたが、ありがとうございました。
16進数への変換も出来ました。



ONION software Copyright 1997-2023(c) All rights reserved.