Tech Note 10: The Bits 'n Bytes Lib Aug 20, 2002
© NSB Corporation. All rights reserved. |
BitsNbyteslibはビット操作および変換を行うための多くの手軽なファンクションをNS Basic/Palmに加えます。様々なビット単位の論理演算( AND、OR、NOTオペレーションなど)、ビットの左右へのシフト、さらに2進、10進、16進の間を変換することができます。
これを使用するためには、BitsnBytesLib.prcをお使いのデバイスへのダウンロードしてください。小さなファイルでサイズは約7kです。以下の様に、startupコードの中で初期化して下さい。
loadLibrary "BitsNBytesLib","BNB" '大文字/小文字は正確に
これらのファンクションには、必ず定義されてるデータタイプを使う必要があります。ほとんどの引数には整数(Integer)を使います。これらのコールのためのIntegerは32ビット、Shortは16ビットで、NSBasic標準のIntegerおよびShort変数と同じです。正しくないデータタイプを使用すると、実行時にエラーになります。
共有ライブラリでルーチンを呼ぶ時、正しい変数タイプを使うことが重要です。呼ぶ側は変数タイプを使って、共有ライブラリに渡されるスタックに、値を入れます。次のコール、
c=BNB.xorInteger(16,4)
は動作しません。これでは16と4がshort、integer、floatなのかが分かりません。次のように16と4を変数に入れると正常に動作します。
dim a as integer dim b as integer a=16 b=4 c=BNB.xorInteger(a,b)
BitsnByteslibには以下のファイルが含まれています。
BitsNbytesbibは現在最終beta版です。全ての問題点はnipponsupport© nsbasic.comへお送り下さい。
関連ファンクション:AndByte、AndShort
例
Dim a as Integer Dim b as Integer Dim c as Integer a = 63 b = 4 c = BNB.AndInteger(a,b) ' 結果は 4
例
Dim a as Integer Dim c as Integer a = 100 c = BNB.Bin2Dec(a) ' 結果は 4
例
Dim buf as String Dim count as Short Dim c as Integer a = "Dmitry" b = Len(a) c = BNB.CRC32(a,b,0) '結果は 168098323
関連ファンクション:CycleShiftByte、CycleShiftShort
例
Dim a as Integer Dim b as Short Dim c as Integer a = 65536 b = 16 c = BNB.CycleShiftInteger(a,b) '結果は 1
例
Dim a as Integer Dim s as String a = 64 s = "123456781234567812345679812345678" BNB.Dec2Bin(a,s) '結果 1000000
例
Dim a as String Dim c as Integer a = "12345678901234567890" c = 64 BNB.Dec2Hex(c,a) '結果は 40
例
Dim src as String Dim dst as String Dim res as String Dim key as String Dim enc as Short Dim err as Integer src = "ASDFGHJK" dst = "!!!!!!!!" res = "!!!!!!!!" key = "12345678" enc=1 err=BNB.EncryptDES(src,key,dst,enc) 'src は暗号化されて dst に入る enc=0 err=BNB.EncryptDES(dst,key,res,enc) 'dst は解読されて res に入る
関連ファンクション:EqvByte、EqvShort
例
Dim a as Integer Dim b as Integer Dim c as Integer Dim mask as Integer a = 64 b = 62 mask = 2 c = BNB.EqvInteger(a,b,mask) '結果は 2
関連ファンクション:GetBitByte、GetBitShort
例
Dim a as Integer Dim b as Short Dim c as Short a = 64 b = 6 c = BNB.GetBitInteger(a,b) '結果は 1
関連ファンクション:GetHiWord、GetLowByte、GetHiByte
例
Dim a as Integer Dim c as Short a = 65537 c = BNB.GetLowWord(a) '結果は 1
例
Dim a as Integer Dim c as String C = "40" A = BNB.Hex2Dec(C) '結果は 64
関連ファンクション:InverseBitByte、InverseBitShort
例
Dim a as Integer Dim b as Short Dim c as Integer a = 3 b = 1 c = BNB.InverseBitInteger(a,b) '結果は 1
関連ファンクション:NotByte、NotShort
例
Dim a as Integer Dim c as Integer a = 32767 c = BNB.NotInteger(a) '結果は -32768
関連ファンクション:OrByte、OrShort
例
Dim a as Integer Dim b as Integer Dim c as Integer a = 3 b = 9 c = BNB.OrInteger(a,b) '結果は 11
関連ファンクション:ResetBitByte、ResetBitShort
例
Dim a as Integer Dim b as Short Dim c as Integer a = 3 b = 0 c = BNB.ResetBitInteger(a,b) '結果は 2
関連ファンクション:SetBitByte、SetBitShort
例
Dim a as Integer Dim b as Short Dim c as Integer a = 2 b = 0 c = BNB.SetBitInteger(a,b) '結果は 3
関連ファンクション:SetHiWord、SetLowByte、SetHighByte
例
Dim a as Integer Dim b as Short Dim c as Integer a = INT(VAL(FldA.text)) b = INT(VAL(FldB.text)) c = BNB.SetLoWord(a,b)
関連ファンクション:ShiftByte、ShiftShort
例
Dim a as Integer Dim b as Short Dim c as Integer a = 65536 b = 16 c = BNB.ShiftInteger(a,b) '結果は 0
関連ファンクション:SignShiftByte、 SignShiftShort
例
Dim a as Integer Dim b as Short Dim c as Integer a = -4 b = 2 c = BNB.SignShiftInteger(a,b) '結果は -16
例
Dim A as Short Dim B as Short A = 256 b=BNB.Swap16(a) 'Bは1 (&h01 -> $h01)
例
Dim A as Integer Dim B as Integer A = 32768 B=BNB.Swap32(a) 'Bは1 (&h0100 -> $h0001)
例
Dim A as Double Dim B as Double A = 32768 B=BNB.Swap64(a)
例
Dim c as Short c = BNB.Version() '結果は 1
関連ファンクション:XorByte、XorShort
例
Dim a as Integer Dim b as Integer Dim c as Integer a = 3 b = 9 c = BNB.XorInteger(a,b) '結果は 10
標準EncryptDESファンクションは、暗号化できる文字列の長さとに限界があり、さらにnull文字を含んだ文字列の暗号化にも問題があります。以下の関数は長い文字列でも暗号化を行えます。
さらにWindowsデスクトップ上で暗号化および解読が行えるコードが提供されています。\nsbasic\tools\BitsNBytes_encrypt.zip
例
Dim keyStr as String keyStr = "secret" BNB.SetDESKey keystr
例
Dim plainText as String Dim encryptedText as String plainText = "The quick brown fox jumps over the lazy dog!" encryptedText = BNB.EncryptDESString(plainText)
例
Dim encryptedText as String Dim plainText as String plainText = BNB.DecryptDESString(encryptedText)
これを使用するには、EncDec.dllファイルをシステム・ディレクトリーに入れるか、あるいは現在あなたのパスにあるディレクトリーに置かなければなりません。Visual Basic/VBAについては、EncDec.basモジュールを含めてください。Visual C/C++については、EncDec.hヘッダーファイルを含めて、EncDec.libライブラリとリンクしてください(注:EncDec.dllは必要です)。
EncDec DLL関数はそれらのBitsNbytesライブラリーと同じ制限を持っています。主な違いは、すべての関数呼び出しを備えた暗号化キーを指定することと、関数が返される文字列の長さを返すということです。
VB/VBA 例
Dim KeyStr As String Dim DecryptedStr As String Dim EncryptedStr As String Dim StrLen As Integer KeyStr = "secret" DecryptedStr = "The quick brown fox jumps over the lazy dog!" StrLen = EncryptData(KeyStr, DecryptedStr, EncryptedStr) DecryptedStr = "" StrLen = DecryptData(KeyStr, EncryptedStr, DecryptedStr)
C/C++ 例
char keyStr[25]; char decryptedStr[251]; char encryptedStr[251]; int len; strcpy(keyStr, "secret"); strcpy(decryptedStr, "The quick brown fox jumps over the lazy dog!"); len = encryptData(keyStr, decryptedStr, encryptedStr); strcpy(decryptedStr, ""); len = decryptData(keyStr, encryptedStr, decryptedStr);