diff --git a/src/config.js b/src/config.js
index 54ba6286d71ea5916439d88b856f70345873058a..e555e231953693f04b4f46a8efb83ecdb5002f94 100644
--- a/src/config.js
+++ b/src/config.js
@@ -39,6 +39,7 @@ const tool = [
{'name': 'time', 'title': '时间计算器', 'cat': ['other']},
{'name': 'uuid', 'title': 'UUID生成', 'cat': ['other']},
{'name': 'jsonToObject', 'title': 'JSON转实体类', 'cat': ['conversion', 'serialize']},
+ {'name': 'ascii', 'title': 'ascii转换', 'cat': ['conversion']},
]
module.exports = {
diff --git a/src/tool.router.js b/src/tool.router.js
index a47b512a0b20a9b8c43cd440d1123897153cd189..810cb2edb9cffffefb065c8c47d7a65beb39360a 100644
--- a/src/tool.router.js
+++ b/src/tool.router.js
@@ -89,6 +89,14 @@ const routes = [
{
path: '/tool/uuid',
component: r => require(['./views/tool/uuid.vue'], r)
+ },
+ {
+ path: '/tool/jsonToObject',
+ component: r => require(['./views/tool/jsonToObject.vue'], r)
+ },
+ {
+ path: '/tool/ascii',
+ component: r => require(['./views/tool/ascii.vue'], r)
}
]
diff --git a/src/views/tool/ascii.vue b/src/views/tool/ascii.vue
new file mode 100644
index 0000000000000000000000000000000000000000..bbdb701d39966bc105f8ab830f697d794f3a0627
--- /dev/null
+++ b/src/views/tool/ascii.vue
@@ -0,0 +1,152 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/views/tool/library/ascii.js b/src/views/tool/library/ascii.js
new file mode 100644
index 0000000000000000000000000000000000000000..6007ed1e4fdd7eb33269c06b351f2dfe380f7916
--- /dev/null
+++ b/src/views/tool/library/ascii.js
@@ -0,0 +1,120 @@
+// ASCII MAP
+import Radix from "radix.js";
+
+const ASCII_MAP = ['NUL', 'SOH', 'STX', 'ETX', 'EOT', 'ENQ', 'ACK', 'BEL', 'BS', 'TAB', 'LF', 'VT', 'FF', 'CR', 'SO', 'SI',
+ 'DLE', 'DC1', 'DC2', 'DC3', 'DC4', 'NAK', 'SYN', 'ETB', 'CAN', 'EM', 'SUB', 'ESC', 'FS', 'GS', 'RS', 'US',
+ ' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F',
+ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[',
+ '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'DEL']
+// ASCII 不可显示字符
+const ASCII_HIDDEN = {
+ 'NUL': "空字符(Null)",
+ 'SOH': "标题开始",
+ 'STX': "本文开始",
+ 'ETX': "本文结束",
+ 'EOT': "传输结束",
+ 'ENQ': "请求",
+ 'ACK': "确认回应",
+ 'BEL': "响铃",
+ 'BS': "退格",
+ 'TAB': "水平定位符号",
+ 'LF': "换行键",
+ 'VT': "垂直定位符号",
+ 'FF': "换页键",
+ 'CR': "归位键",
+ 'SO': "取消变换(Shift out)",
+ 'SI': "启用变换(Shift in)",
+ 'DLE': "跳出数据通讯",
+ 'DC1': "设备控制一(XON 启用软件速度控制)",
+ 'DC2': "设备控制二",
+ 'DC3': "设备控制三(XOFF 停用软件速度控制)",
+ 'DC4': "设备控制四",
+ 'NAK': "确认失败回应",
+ 'SYN': "同步用暂停",
+ 'ETB': "区块传输结束",
+ 'CAN': "取消",
+ 'EM': "连接介质中断",
+ 'SUB': "替换",
+ 'ESC': "跳出",
+ 'FS': "文件分割符",
+ 'GS': "组群分隔符",
+ 'RS': "记录分隔符",
+ 'US': "单元分隔符",
+ 'DEL': "删除",
+}
+const radix = new Radix();
+
+class Ascii {
+ constructor(c, type = "str") {
+ let dec = -1;
+ c = c + "";
+ if (type !== "str"){
+ c = c.toLowerCase();
+ }
+ switch (type) {
+ case 'str':
+ dec = ASCII_MAP.indexOf(c)
+ break;
+ case 'dec':
+ dec = radix.convent(c, 10, 10);
+ break;
+ case 'hex':
+ dec = radix.convent(c, 16, 10);
+ break;
+ case 'oct':
+ dec = radix.convent(c, 8, 10);
+ break;
+ case 'bin':
+ dec = radix.convent(c.replace(/\b(0+)/gi, ""), 2, 10);
+ break;
+ default:
+ throw 'type error'
+ }
+ if (dec < 0 || dec > 127) {
+ throw 'input error'
+ }
+ this.decData = dec
+ }
+
+ dec() {
+ return this.decData + ""
+ }
+
+ hex() {
+ return (radix.convent(this.decData, 10, 16) + "").toUpperCase()
+ }
+
+ oct() {
+ return radix.convent(this.decData, 10, 8) + ""
+ }
+
+ bin() {
+ return (radix.convent(this.decData, 10, 2) + "").padStart(8, '0')
+ }
+
+ str() {
+ return ASCII_MAP[this.decData]
+ }
+}
+
+const convent = (s, currentType, targetType) => {
+ const types = ['str', 'dec', 'hex', 'oct', 'bin'];
+ if (!types.includes(currentType) || !types.includes(targetType)) {
+ throw 'type error'
+ }
+ let r = [];
+ for (const c of s.split(currentType === "str" ? '' : ' ')) {
+ let ascii = new Ascii(c, currentType);
+ r.push(ascii[targetType]())
+ }
+ return r.join(targetType === "str" ? '' : ' ');
+}
+
+export default {
+ convent,
+ Ascii,
+ ascii_map: ASCII_MAP,
+ ascii_hidden: ASCII_HIDDEN,
+}
\ No newline at end of file