Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何操作控制字符?_Clojure - Fatal编程技术网

Clojure 如何操作控制字符?

Clojure 如何操作控制字符?,clojure,Clojure,对于如何将通过HTML文本框提供的ASCII控制字符转换为十六进制或二进制表示形式的建议,我将不胜感激 目前,我的web应用程序采用ASCII控制字符串并转换值,例如,如果输入了^C,则返回值5e43,表示“^”和“6”,而不是control-C,用十六进制表示02 我的想法是对输入运行一个正则表达式,以检查控制字符,例如:^[\w]{1},然后从与正则表达式匹配的预定义表中返回值。您可以使用(.*in*read)直接从中读取字符,尽管字符的获取方式取决于很多事情,最具体的情况是,在您开始之前,

对于如何将通过HTML文本框提供的ASCII控制字符转换为十六进制或二进制表示形式的建议,我将不胜感激

目前,我的web应用程序采用ASCII控制字符串并转换值,例如,如果输入了
^C
,则返回值
5e43
,表示“^”和“6”,而不是control-C,用十六进制表示
02


我的想法是对输入运行一个正则表达式,以检查控制字符,例如:
^[\w]{1}
,然后从与正则表达式匹配的预定义表中返回值。

您可以使用
(.*in*read)
直接从中读取字符,尽管字符的获取方式取决于很多事情,最具体的情况是,在您开始之前,浏览器可能会为http传输对它们进行编码

我维护了一个安全的终端代理,该代理必须处理所有控制字符的组合,因此我想我要传达一些注意事项:

  • 它们不是一个字符长。最多需要六个字符来表示它们。尝试按Esc Ctrl alt左箭头
  • esc表示Alt,但Alt不表示esc。如果第一个字符是esc,则下一个字符是其字符值的meta/alt。如果你看到esc-b,这是Alt-b
  • 某些键(例如翻页)会自动发送esc
  • esc是它自己的东西(我不能说我完全理解)
最好的方法是编写一个小程序,从键盘上一次读取一个字符,然后开始捣碎键盘,看看你能想出什么

在这里,我将读两遍中的一个角色,第一次击中目标,第二次结束

clojure.core=> (. *in* read)
10
clojure.core=> (. *in* read)
10
很明显,一个字符不足以区分这两个键,两个字符如何

下一个示例不会在repl中运行,因为repl尝试为您“处理”控制字符,所以您必须创建一个新项目
lein new esc
添加此代码,然后
lein uberjar
java-jar esc-1.0.0-SNAPSHOT-standalone.jar

(ns esc.core
  (:gen-class))

(defn -main []
  (dorun (repeatedly #(println (. *in* read)))))
运行它并按下这两个键会产生以下结果:

^[OF
27
79
70
10      <-- this is the newline
^[OH
27      <-- esc start marker look for this
79
72
10      <-- this is the newline
和ctrl字符大奖得主迄今为止esc右箭头

以6字节的速度获奖

^[^[OF
27
27
79
70
10
^[[1;5C
27
91
49
59
53
67
10