一直玩Javascript并发现似乎很有趣的转义(\ x)。
为了澄清我发现我可以使用escape + x,
将两位数转换成一个字母类似于"\x51"
输出Q
一直在搜索这个特定主题,但不确定从哪里开始,因为我甚至不知道他们称之为什么,就像我知道PHP和Javascript中的反斜杠目的但我不知道它的作用当它与x
现在我的问题是,是否可以在X后添加动态数字值?
就像我尝试创建这样的函数一样但它似乎不可能,因为它看起来需要在x
之后有两个字符(数字或字母)。
function __num_string( num ) {
return "\x"+num;
}
期望 __num_string( 51 )
会返回Q
现实 Uncaught SyntaxError: Unexpected token ILLEGAL
如果可能与否,我将不胜感激,
由于
答案 0 :(得分:2)
是的,这是可能的,但有一个better way to do it:
return String.fromCharCode(num);
...其中num
是您想要获得的角色的Unicode值。
尽管如此,从技术上讲,使用eval
可以按照您原定的方式实现您的功能:
function __num_string( num ) {
if (/^[a-f0-9]{1,2}$/i.test(num)) {
return eval('"\\x' + num + '"');
}
}
注意区别:num
应该是表示十六进制值的字符串。
现在关于你得到的错误:这......
'\x'
...技术上是无效的字符串。解析字符串文字时,解析器期望序列\x
后跟[0-9a-f]
字符范围。然而在你的情况下,那里没有任何相似之处,因此Unexpected token ILLEGAL
。
答案 1 :(得分:1)
字符串转义是一种语法特征,是字符串文字的一部分 在运行时这样做是没有意义的。
您正在寻找String.fromCharCode
,这听起来确实如此。
答案 2 :(得分:0)
foreach(QString file, listFile) {
int row=-1;
for (int var = 0; var < ui->tableView->model()->rowCount(); ++var) {
if(ui->tableView->model()->index(row,0).data().toString()==file){
row=var;
}
}
而不是51₁₀String.fromCharCode
(81).toString(16)
81..toString(16)
81.0.toString(16)
在阅读了该问题的答案和评论后,随后进行了调查。
牢记我从问题中得出的假设
为什么要使用主要解决方案numberVar.toString(16)
,
尝试时似乎无法回答提问者的问题。
假设是问题出在传递给String.fromCharCode
的参数类型之内。
以下内容在节点repl中演示了String.fromCharCode
返回'\x51' === 'Q'
而true
也返回String.fromCharCode(51) === 3
的原因。
true
只要您想自己尝试一下就可以。
> 0x51 // es6 hexadecimal literal
81
> 0x51.toString(16) // Same as (81).toString(16)
'51'
> String.fromCharCode(0x51) // Same as String.fromCharCode(81)
'Q'
> (81).toString(16) // Same as 0x51.toString(16)
51
> String.fromCharCode(81) // Same as String.fromCharCode(0x51)
'Q'
> 0x33 // es6 hexadecimal literal
51
> 0x33.toString(16) // literal to base 16 string
'33'
> String.fromCharCode(0x33)
'3'
> String.fromCharCode(51)
'3'
似乎所讨论的方法采用十六进制字符串。
如果是数字,则隐式调用以16为基础传递的toString()。
下面是执行转换的函数。
0x51
0x51.toString(16)
String.fromCharCode(0x51)
(81).toString(16)
String.fromCharCode(81)
0x33
0x33.toString(16)
String.fromCharCode(0x33)
String.fromCharCode(51)
它可以与数字一起使用
function toHex(n) {
if (typeof n === 'string') return `${parseInt(n, 16)}`;
return `0x${n}`;
}
它可以与字符串一起使用
> String.fromCharCode(toHex(33))
'3'
> String.fromCharCode(toHex(51))
'Q'
它可以与十六进制数字一起使用,但只能用作字符串...
> String.fromCharCode(toHex('33'))
'3'
> String.fromCharCode(toHex('51'))
'Q'
因为没有它,十六进制数字文字就可以了。
> String.fromCharCode(toHex('3f'))
'?'