Skip to content

Commit

Permalink
feat: 添加 char.HexToBin 和 char.BinToHex 两个 API
Browse files Browse the repository at this point in the history
  • Loading branch information
dzpao committed Apr 8, 2024
1 parent 59c71ec commit 0e9902c
Showing 1 changed file with 149 additions and 0 deletions.
149 changes: 149 additions & 0 deletions plugins/lib/xtintin/string.tin
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,155 @@ PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>)
#func {str.DecToHex} {#format result {00%X} {%0}; #format result {%.-2s} {$result}};
#func {dec2hex} {#return {@str.DecToHex{%0}}};

///=== {
// #@ str.BinToHex <二进制数字串>
// 二进制转十六进制
//
// EXAMPLE: \@str.BinToHex{0}
// RESULT: {0}
//
// EXAMPLE: \@str.BinToHex{1}
// RESULT: {1}
//
// EXAMPLE: \@str.BinToHex{10}
// RESULT: {2}
//
// EXAMPLE: \@str.BinToHex{0111}
// RESULT: {7}
//
// EXAMPLE: \@str.BinToHex{1000}
// RESULT: {8}
//
// EXAMPLE: \@str.BinToHex{1111}
// RESULT: {F}
//
// EXAMPLE: \@str.BinToHex{01011}
// RESULT: {0B}
//
// EXAMPLE: \@str.BinToHex{0000010010001101001010101111001101}
// RESULT: {01234ABCD}
// };
#func {str.BinToHex} {
#local bin {%1};
#local hex {};

#if { "$bin" == "" } {
#return {};
};

#local len {@str.Len{$bin}};

#switch {$len % 4} {
#case {0} {#0};
#case {1} {#local bin {000$bin}};
#case {2} {#local bin {00$bin}};
#case {3} {#local bin {0$bin}};
};

#math len {(($len - 1) % 4 + 1) * 4};

#while {1} {
#if { @str.Len{$bin} < 1 } {
#return {$hex};
};
#local parts {$bin};
#replace parts {^%+4S%*$} {
{left} {&1}
{right} {&2}
};
#local parts {$parts};
#switch {"$parts[left]"} {
#case {"0000"} {#cat hex {0}};
#case {"0001"} {#cat hex {1}};
#case {"0010"} {#cat hex {2}};
#case {"0011"} {#cat hex {3}};
#case {"0100"} {#cat hex {4}};
#case {"0101"} {#cat hex {5}};
#case {"0110"} {#cat hex {6}};
#case {"0111"} {#cat hex {7}};
#case {"1000"} {#cat hex {8}};
#case {"1001"} {#cat hex {9}};
#case {"1010"} {#cat hex {A}};
#case {"1011"} {#cat hex {B}};
#case {"1100"} {#cat hex {C}};
#case {"1101"} {#cat hex {D}};
#case {"1110"} {#cat hex {E}};
#case {"1111"} {#cat hex {F}};
};
#local bin {$parts[right]};
};
};

///=== {
// #@ str.HexToBin <十六进制数字串>
// 十六进制转二进制
//
// EXAMPLE: \@str.HexToBin{0}
// RESULT: {0000}
//
// EXAMPLE: \@str.HexToBin{1}
// RESULT: {0001}
//
// EXAMPLE: \@str.HexToBin{2}
// RESULT: {0010}
//
// EXAMPLE: \@str.HexToBin{7}
// RESULT: {0111}
//
// EXAMPLE: \@str.HexToBin{8}
// RESULT: {1000}
//
// EXAMPLE: \@str.HexToBin{F}
// RESULT: {1111}
//
// EXAMPLE: \@str.HexToBin{f}
// RESULT: {1111}
//
// EXAMPLE: \@str.HexToBin{0B}
// RESULT: {00001011}
//
// EXAMPLE: \@str.HexToBin{01234ABCD}
// RESULT: {000000010010001101001010101111001101}
// };
#func {str.HexToBin} {
#local hex {%1};
#local bin {};

#while {1} {
#local parts {$hex};
#if { @str.Len{$hex} < 1 } {
#return {$bin};
};
#replace parts {^%+1S%*$} {
{left} {&1}
{right} {&2}
};
#local parts {$parts};
#local hex {$parts[right]};
#switch {"$parts[left]"} {
#case {"0"} {#cat bin {0000}};
#case {"1"} {#cat bin {0001}};
#case {"2"} {#cat bin {0010}};
#case {"3"} {#cat bin {0011}};
#case {"4"} {#cat bin {0100}};
#case {"5"} {#cat bin {0101}};
#case {"6"} {#cat bin {0110}};
#case {"7"} {#cat bin {0111}};
#case {"8"} {#cat bin {1000}};
#case {"9"} {#cat bin {1001}};
#case {"{A|a}"} {#cat bin {1010}};
#case {"{B|b}"} {#cat bin {1011}};
#case {"{C|c}"} {#cat bin {1100}};
#case {"{D|d}"} {#cat bin {1101}};
#case {"{E|e}"} {#cat bin {1110}};
#case {"{F|f}"} {#cat bin {1111}};
};
};
};

#func {bin2hex} {#return {@str.BinToHex{%0}}};
#func {hex2bin} {#return {@str.HexToBin{%0}}};

///=== {
// #@ str.Format <格式> <参数>
// 执行 #format result <格式> <参数> 操作。
Expand Down

0 comments on commit 0e9902c

Please sign in to comment.