目次 †
C/C++ †
16進数を10進数に変換する †
// ------------------------------------------------------------------
//
// Hex2Dec
//
// 16進数を10進数に変換する
//
int Hex2Dec(char c)
{
switch (c)
{
case 'A':
case 'a':
return 10;
case 'B':
case 'b':
return 11;
case 'C':
case 'c':
return 12;
case 'D':
case 'd':
return 13;
case 'E':
case 'e':
return 14;
case 'F':
case 'f':
return 15;
default:
return (c - 48);
}
}
Base64エンコード †
// ------------------------------------------------------------------
//
// 0xfc = 11111100 マスク用ビットシーケンス
// 0x03 = 00000011
// 0xf0 = 11110000
// 0x0f = 00001111
// 0xc0 = 11000000
// 0x3f = 00111111
// 0x30 = 00110000
// 0x3c = 00111100
//
// ------------------------------------------------------------------
// The Base64 アルファベット
const
char szB64[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// ------------------------------------------------------------------
//
// ToB64()
//
// 機能
// ある文字列を入力とし、それをBase64エンコードに変換する。
// 戻り値は、動的に割り当てられており、呼び出し元が解放しなければ
// ならない。
//
// Base64エンコード
// 24ビットのシーケンスを4文字のエンコードされたシーケンスに変換する。
// 4文字にするには、24ビットのグループを4つの6ビットグループに分ける。
// 各6ビットシーケンスは、Base64アルファベットのインデックスとして解釈
// される。
// データの終わりに達したときにに未処理のビットが24ビットに満たない
// 場合は、「=」文字を使って特殊なエンコードを行う。
// 残りが8ビットならば、2つの文字を生成した後に2つの「=」でデータを
// パディングする。
// 16ビットならば、3つの文字を生成した後に1つの「=」でエンコード出力を
// パディングする。
//
// 例) 24ビットシーケンスのエンコード
// ・24ビットシーケンス
// 00110011 00110011 00110011
// ・4つの6ビットシーケンス化
// 001100 110011 001100 110011
// ・4つの8ビットシーケンス化
// 00001100 00110011 00001100 00110011
// ・Base64エンコード
// L y L y
char * ToB64(char *szStr)
{
char *szEnc;
int iLen,
i,
j;
// 文字列をエンコードするための空間確保
iLen = strlen(szStr);
szEnc = new char [(int)((float)iLen * 1.5)];
// 一度に3バイトずつエンコード
j = 0;
for (i = 0; i < (iLen - (iLen % 3)); i+=3)
{
szEnc[j] = szB64[ (szStr[i] & 0xfc) >> 2 ];
szEnc[j+1] = szB64[ ((szStr[i] & 0x03) << 4) |
((szStr[i+1] & 0xf0) >> 4) ];
szEnc[j+2] = szB64[ ((szStr[i+1] & 0x0f) << 2) |
((szStr[i+2] & 0xc0) >> 6) ];
szEnc[j+3] = szB64[ (szStr[i+2] & 0x3f) ];
j += 4;
}
// 残りのサイズ計算
i = iLen - (iLen % 3);
switch (iLen % 3)
{
// 1文字分のパディングが必要
case 2:
{
szEnc[j] = szB64[ (szStr[i] & 0xfc) >> 2 ];
szEnc[j+1] = szB64[ ((szStr[i] & 0x03) << 4) | ((szStr[i+1] & 0xf0) >> 4) ];
szEnc[j+2] = szB64[ (szStr[i+1] & 0x0f) << 2 ];
szEnc[j+3] = szB64[64]; // Pad
break;
}
// 2文字分のパディングが必要
case 1:
{
szEnc[j] = szB64[ (szStr[i] & 0xfc) >> 2 ];
szEnc[j+1] = szB64[ (szStr[i] & 0x03) << 4 ];
szEnc[j+2] = szB64[64]; // Pad
szEnc[j+3] = szB64[64]; // Pad
break;
}
}
szEnc[j+4] = NULL;
return (szEnc);
}
EXCEL †
IPヘッダのチェックサムを求める †
- IP_header_checksum.xlsx
最新の20件
2023-10-30
2023-09-23
2018-05-22
2014-08-14
2010-07-04
2007-02-17
2007-01-07
今日の9件
- counter: 379
- today: 1
- yesterday: 0
- online: 1