Aardio-拡張システム機能を実装するためのカスタムライブラリ。

機能の実現:

拡張カーネルライブラリ関数

  • tonumberEx(__)=数値に変換(拡張バージョン)\ nパラメーターが10進数の場合、小数点以下9桁に丸められた値を返します; \ ntonumber()を置き換えることができます
  • toHex(__)= 16進テキストを取得します。\ n数値、テキスト文字列、バッファ、ポインタをサポートします。\ n文字列、バッファ、ポンターの場合、パラメータを取ることができます:\ n @ 2:開始位置を指定します(負の数にすることができます)\ n @ 3:変換するデータの長さを指定します。
  • hexToNumber(__)= 16進数のテキストから数値
  • hexToString(__)= 16進数のテキストからテキストへ
  • hexToBuffer(__)=バッファリングする16進テキスト
  •  
  • string.utf8ToAnsi(__)= utf8からansi。コードは_CHARSET_で始まる定数です。
  • string.utf8ToGbk(__)= utf8からGBK。コードは_CHARSET_で始まる定数です。
  • string.utf8ToUnicode(__)= utf8からunicode(UTF16)。コードは_CHARSET_で始まる定数です。
  • string.ansiToUtf8(__)= ansiからutf8。コードは_CHARSET_で始まる定数です。
  • string.ansiToUnicode(__)= ansi to unicode(UTF16)。コードは_CHARSET_で始まる定数です。
  • string.ansiToGbk(__)= ansiからgbk。コードは_CHARSET_で始まる定数です。
  • string.unicodeToUtf8(__)= unicode(UTF16)からutf8。コードは_CHARSET_で始まる定数です。
  • string.unicodeToAnsi(__)= unicode(UTF16)からansiへ。コードは_CHARSET_で始まる定数です。
  • string.unicodeToGbk(__)= unicode(UTF16)からgbk。コードは_CHARSET_で始まる定数です。
  • table.sortEx(__、1、false、0)=テーブルの並べ替え。\ n元のテーブルを直接変更し、変更が成功した場合はtrueを返します。\ nパラメータ1:並べ替えるテーブル。各アイテムがテーブル(サブテーブル)の場合、パラメーター2で並べ替えるための参照フィールドを指定する必要があります; \ nパラメーター2:並べ替えるサブテーブルの参照フィールド(配列インデックスまたは辞書キー名); \ nサブアイテムの場合配列の場合、参照フィールドのデフォルトは1です。\ nパラメータ3:順序を逆にするかどうか。\ nパラメータ4:並べ替え前にデータを変換し、1を時間に変換し、2を数値に変換し、3をテキストに変換し、その他は変換しません。
     
  • _CHARSET_UTF8 = @ 65001 / * _ CHARSET_UTF8 * /
  • _CHARSET_UTF16 = @ 1200 / * _ CHARSET_UTF16 * /
  • _CHARSET_UNICODE = @ 1200 / * _ CHARSET_UNICODE * /
  • _CHARSET_BIG5 = @ 950 / * _ CHARSET_BIG5 * /
  • _CHARSET_GBK = @ 936 / * _ CHARSET_GBK * /
  • _CHARSET_ANSI = @ 0x0 / * _ CHARSET_ANSI * /
  • _CHARSET_GB18030 = @ 54936 / * _ CHARSET_GB18030 * /
  • _CHARSET_GB2312 = @ 936 / * _ CHARSET_GB2312 * /
     

ライブラリファイルの場所:

〜\ lib \ godking.aardio 

ライブラリコード: 

namespace godking

..tonumberEx = function(num,...){
    if (type(num)=="number"){
        if (..math.isInteger(num)) 
        return num;
   		return ..math.round(num,9);
   	}   return ..tonumber(num,...);
}

..toHex = function(v,s,l){
    select(type(v)) {
    	case "number" {
    		return ..string.format("%X",v);	
    	}
    	case "string","buffer" {
    		if (s?l) return ..toHex(..raw.toPointer(v),s,l); 
    		else return ..string.hex(v,"");	
    	}
    	case "pointer" {
    		s:=1
    		l:=1
   			var b = ..raw.buffer(l)
   			..raw.copy(b,..topointer((..tonumber(v)+s-1)),l)
   			return ..string.hex(b,"");
    	}
	}
}


..string.utf8ToAnsi = function(str){
	return ..string.fromto(str,65001/*_CHARSET_UTF8*/,0x0/*_CHARSET_ANSI*/);
}

..string.utf8ToGbk = function(str){
	return ..string.fromto(str,65001/*_CHARSET_UTF8*/,936/*_CHARSET_GBK*/);
}

..string.utf8ToUnicode = function(str){
	return ..string.fromto(str,65001/*_CHARSET_UTF8*/,1200/*_CHARSET_UNICODE*/);
}

..string.ansiToUtf8 = function(str){
	return ..string.fromto(str,0x0/*_CHARSET_ANSI*/,65001/*_CHARSET_UTF8*/);	
}

..string.ansiToUnicode = function(str){
	return ..string.fromto(str,0x0/*_CHARSET_ANSI*/,1200/*_CHARSET_UNICODE*/);
}

..string.ansiToGbk = function(str){
	return ..string.fromto(str,0x0/*_CHARSET_ANSI*/,936/*_CHARSET_GBK*/);	
}

..string.unicodeToUtf8 = function(str){
	return ..string.fromto(str,1200/*_CHARSET_UNICODE*/,65001/*_CHARSET_UTF8*/);	
}

..string.unicodeToAnsi = function(str){
	return ..string.fromto(str,1200/*_CHARSET_UNICODE*/,0x0/*_CHARSET_ANSI*/);	
}

..string.unicodeToGbk = function(str){
	return ..string.fromto(str,1200/*_CHARSET_UNICODE*/,936/*_CHARSET_GBK*/);	
}

..hexToNumber = function(hex){
	return ..tonumber(hex,16); 	
}

..hexToString = function(hex){
	return ..string.unhex(hex,""); 
}

..hexToBuffer = function(hex){
	return ..raw.buffer(..string.unhex(hex,"")); 
}

..table.sortEx = function(array,key,desc=false,convert=0){
    if (!array) return ; 
    if (type(array)!="table") return ;
    if (..table.count(array)=0) return ;  
    //对数组进行排序
	if (type(array[1])!="table"){
		//如果没有数组成员则返回
		if(!#array) return ; 
		if (convert=1/*转换为时间*/){
			if(desc){
				..table.sort(array,function(b){
					return ..time(owner) > ..time(b)
				})	
			}else{
				..table.sort(array,function(b){
					return ..time(owner) < ..time(b)
				})
			}
		}elseif (convert=2/*转换为数值*/){
			if(desc){
				..table.sort(array,function(b){
					return ..tonumber(owner) > ..tonumber(b)
				})	
			}else{
				..table.sort(array,function(b){
					return ..tonumber(owner) < ..tonumber(b)
				})
			}
		}elseif (convert=3/*转换为文本*/){
			if(desc){
				..table.sort(array,function(b){
					return ..tostring(owner) > ..tostring(b)
				})	
			}else{
				..table.sort(array,function(b){
					return ..tostring(owner) < ..tostring(b)
				})
			}
		}else/*不进行转换处理*/{
			if(desc){
				..table.sort(array,function(b){
					return owner > b
				})	
			}else{
				..table.sort(array,function(b){
					return owner < b
				})
			}
		}
		return true; 
	}
	//处理子表合法性
	if (#array[1]){
		key:=1
		if (type(key)!="number") return ;
	}else{
		key:=..table.keys(array[1])[1]
		if (!key or type(key)!="string") return ;
	}
	//进行子表排序
	if(convert=1/*转换为时间*/){
		if(desc){
			..table.sort(array,function(b){
				return ..time(owner[key]) > ..time(b[key])
			})	
		}
		else {
			..table.sort(array,function(b){
				return ..time(owner[key]) < ..time(b[key])
			})
		}
	}elseif(convert=2/*转换为数值*/){
		if(desc){
			..table.sort(array,function(b){
				return ..tonumber(owner[key]) > ..tonumber(b[key])
			})	
		}
		else {
			..table.sort(array,function(b){
				return ..tonumber(owner[key]) < ..tonumber(b[key])
			})
		}
	}elseif(convert=3/*转换为文本*/){
		if(desc){
			..table.sort(array,function(b){
				return ..tostring(owner[key]) > ..tostring(b[key])
			})	
		}
		else {
			..table.sort(array,function(b){
				return ..tostring(owner[key]) < ..tostring(b[key])
			})
		}
	}else/*不进行转换处理*/{
		if(desc){
			..table.sort(array,function(b){
				return owner[key] > b[key]
			})	
		}
		else {
			..table.sort(array,function(b){
				return owner[key] < b[key]
			})
		}
	}
	return true; 	
}
 

/**intellisense()
tonumberEx(__) = 转换为数值(加强版)\n参数如果为小数,返回四舍五入到小数点后9位的数值;\n可代替tonumber()
toHex(__) = 取十六进制文本。\n支持数值number、文本string、缓冲区buffer、指针pointer。\n如果是string、buffer、ponter,可以带参数:\n    @2:指定开始位置(可以为负数)\n    @3:指定要转换的数据长度。
hexToNumber(__) = 十六进制文本转数值
hexToString(__) = 十六进制文本转文本
hexToBuffer(__) = 十六进制文本转缓冲区
end intellisense**/

/**intellisense()
string.utf8ToAnsi(__) = utf8转ansi。编码为_CHARSET_开头的常量。
string.utf8ToGbk(__) = utf8转GBK。编码为_CHARSET_开头的常量。
string.utf8ToUnicode(__) = utf8转unicode(UTF16)。编码为_CHARSET_开头的常量。
string.ansiToUtf8(__) = ansi转utf8。编码为_CHARSET_开头的常量。
string.ansiToUnicode(__) = ansi转unicode(UTF16)。编码为_CHARSET_开头的常量。
string.ansiToGbk(__) = ansi转gbk。编码为_CHARSET_开头的常量。
string.unicodeToUtf8(__) = unicode(UTF16)转utf8。编码为_CHARSET_开头的常量。
string.unicodeToAnsi(__) = unicode(UTF16)转ansi。编码为_CHARSET_开头的常量。
string.unicodeToGbk(__) = unicode(UTF16)转gbk。编码为_CHARSET_开头的常量。

table.sortEx(__,1,false,0) = 表排序。\n直接修改原表,修改成功返回true。\n参数1:要排序的表。如果每一项都是表(子表),则需要通过参数2指定排序的参考字段;\n参数2:要排序的子表的参考字段(数组索引或字典键名);\n       如果子项为数组,则参考字段默认为1\n参数3:是否逆序。\n参数4:将数据进行转换后再排序,1转换为时间,2转换为数值,3转换为文本,其它不转换。
end intellisense**/

/**intellisense()
_CHARSET_UTF8 = @65001/*_CHARSET_UTF8*/
_CHARSET_UTF16 = @1200/*_CHARSET_UTF16*/
_CHARSET_UNICODE = @1200/*_CHARSET_UNICODE*/
_CHARSET_BIG5 = @950/*_CHARSET_BIG5*/
_CHARSET_GBK = @936/*_CHARSET_GBK*/
_CHARSET_ANSI = @0x0/*_CHARSET_ANSI*/
_CHARSET_GB18030 = @54936/*_CHARSET_GB18030*/
_CHARSET_GB2312 = @936/*_CHARSET_GB2312*/
end intellisense**/

呼び出し例:

import console; 
import godking;

var d1 = 0.575*100
var d2 = tonumberEx(0.575*100)
console.log("未处理的不精确值 ->",string.format("%.16f",d1 ))
console.log("处理过的精确值 ->",string.format("%.16f",d2 ))

var num = 12345678
var txt="12345678"
var buffer = raw.buffer(txt);
var pointer = raw.toPointer(buffer)
console.log(toHex(num))
console.log(toHex(txt))
console.log(toHex(buffer))
console.log(toHex(pointer,-8,20))

var utf8 = "这里是utf8字符串"
var ansi = string.utf8ToAnsi(utf8)
var unicode = string.ansiToUnicode(ansi)
console.log("utf8->",toHex(utf8))
console.log("ansi->",toHex(ansi))
console.log("unicode->",toHex(unicode))

console.pause(true);

結果:

おすすめ

転載: blog.csdn.net/sdlgq/article/details/112394376