データの符号化(1)の16進符号化
1621 ワード
最近はデータコードを簡単に勉強して、ノートを書くようになりました.まずデータについて話しましょう.プログラマーの立場から言えば、データは実はいくつかのバイトです.例えば、IPアドレスはプログラマーにとってこのように表すunsigned char[ip]={192,168,1,100}であり、C 0 A 8 01 64とも書く.IPアドレスはデータであり、4バイトからなる.彼はデータの一種の表現である.メールでデータを送信する場合は、次のような方法を選択できます.
(1)送信77,90144,0,3,0(2)送信4 D 5 A 90000,300(16進符号化)(3)送信TVqQAMA(base 64符号化)
メールにはテキストしか入力できないので、データをテキスト化する必要があります.それに比べて、(2)は(1)より短く、(3)は(2)より短く
16進数表記:バイトごとに2文字に変換して表記します.元データ長がNの場合、変換された長さは2*Nとなります.データをテキストに変換するのは、暗号化ではなく、あなたの秘密が保護されていない変換アルゴリズムです.
次に、バイトと16進数の変換の2つの方法を書きます.
適用シーン:
(1)URLにバイトデータを渡すが,URLにはテキストのみを渡すことが許可されているため,テキスト(2)XMLにバイトデータを挟むことができ,あるノードがバイトデータである場合,テキスト表示(3)他にテキストしか使用できない場合
(1)送信77,90144,0,3,0(2)送信4 D 5 A 90000,300(16進符号化)(3)送信TVqQAMA(base 64符号化)
メールにはテキストしか入力できないので、データをテキスト化する必要があります.それに比べて、(2)は(1)より短く、(3)は(2)より短く
16進数表記:バイトごとに2文字に変換して表記します.元データ長がNの場合、変換された長さは2*Nとなります.データをテキストに変換するのは、暗号化ではなく、あなたの秘密が保護されていない変換アルゴリズムです.
次に、バイトと16進数の変換の2つの方法を書きます.
unsigned char Hex2Int(char ch)
{
unsigned char val = 0;
if ('a' <= ch && ch <= 'f')
{
return 10 + ch - 'a';
}
else if ('A' <= ch && ch <= 'F')
{
return 10 + ch - 'A';
}
else if (ch >= '0' && ch <= '9')
{
return ch - '0';
}
}
//data: n hex
int Encode(const unsigned char* data , int n , char* hex)
{
int count = 0;
for (int i = 0; i < n; i++)
{
//
char buf[3];
sprintf(buf , "%02X" , data[i]);
//
hex[count++] = buf[0];
hex[count++] = buf[1];
}
hex[count] = 0;
return count;
}
//data len
int Decode(unsigned char* data , const char* hex , int len)
{
int count = 0;
for (int i = 0; i < len; i++)
{
//
unsigned char high = Hex2Int(hex[i]);//
unsigned char low = Hex2Int(hex[i + 1]);//
data[count++] = (high << 4) + low;
}
return count;
}
適用シーン:
(1)URLにバイトデータを渡すが,URLにはテキストのみを渡すことが許可されているため,テキスト(2)XMLにバイトデータを挟むことができ,あるノードがバイトデータである場合,テキスト表示(3)他にテキストしか使用できない場合