网上偶然碰到一道 JS 题目,做到半截没思路了,求助

2017-08-27 21:02:45 +08:00
 winglight2016

有这么个数组: [25867, 13799, 14327, 25933, 14447, 14087, 25471, 13249, 13457, 25303, 25423, 14639, 14489, 12757, 12589, 14747, 14177, 13627, 14401, 13147, 14051, 26053, 13159, 26309, 25793, 14149, 25841, 12763, 14639, 26309, 25847, 25171, 25073, 25747, 26237, 25679, 12799, 25913, 14843, 13309] 需要转换成字母和数字的一串字符,提示是:ASCII 我试了几种组合出来的都是有各种符号的字符串,请教高手这种五位数字要怎么转换?

3101 次点击
所在节点    JavaScript
16 条回复
tomato3
2017-08-27 22:29:52 +08:00
var a = [25867, 13799, 14327, 25933, 14447, 14087, 25471, 13249, 13457, 25303, 25423, 14639, 14489, 12757, 12589, 14747, 14177, 13627, 14401, 13147, 14051, 26053, 13159, 26309, 25793, 14149, 25841, 12763, 14639, 26309, 25847, 25171, 25073, 25747, 26237, 25679, 12799, 25913, 14843, 13309]
var l1 = [];
var l2 = [];
var l3 = [];
var _ =String.fromCharCode.bind(String);
var __ =String.fromCodePoint.bind(String);
var $ = (n)=>parseInt(n,16);
var list = a.map((n,i)=>{
l1[i]=~~(n/10000);
l2[i] = ~~((n%10000)/100);
console.log()
l3[i] = (n%100);
console.log(i,l1[i],l2[i],l3[i],_(l2[i]),_(l3[i]),_($(l2[i])),_($(l3[i])),__($(l2[i])),__($(l3[i])))


var hex = 0;
if(l1[i]==2){
hex =l2[i]
}else{
hex =l3[i]
}
return String.fromCodePoint(parseInt(hex,16))
})
console.log(list)

输出了所有,看了一下,似乎只有一列是都有字符的,其他的列没有。
不知道前面那个 1,2 有什么用。
v1024
2017-08-28 07:59:14 +08:00
parseInt(num, 16)
winglight2016
2017-08-28 09:10:41 +08:00
@tomato3 没看明白你的代码做了什么转换?这些数字不是 16 进制啊?
winglight2016
2017-08-28 09:12:29 +08:00
@v1024 转了 16 进制依然没看出什么格式的数据
Arrowing
2017-08-28 10:37:42 +08:00
楼主把原题目的意思改得面目全非。。。
coolyujiyu
2017-08-28 11:41:03 +08:00
楼主只看里面的数组,不读前面的描述?你确定是让你直接解 5 位数字?你用翻译工具翻译看看
wingkou
2017-08-28 11:42:56 +08:00
读图(敲黑板
wingkou
2017-08-28 11:43:22 +08:00
读题。。。
winglight2016
2017-08-28 11:58:37 +08:00
你们都不看我给的数字和原始的数组有多大区别吗?我给的 40 位数组是已经处理过的啊~~~
winglight2016
2017-08-28 12:00:18 +08:00
@coolyujiyu 你要是读懂了描述,不妨和工具翻译的结果比较一下,看看自动翻译的结果到底能不能用?
misaka20038numbe
2017-08-28 12:24:13 +08:00
1.去掉非质数 2.右移(右移多少位我看不懂英文不知道)
leewangyang
2017-08-28 12:48:58 +08:00
@misaka20038numbe 右移π的第 322 小数位
leewangyang
2017-08-28 13:01:36 +08:00
查了下表,322 位是 8,也就是要右移 8 位,如果你滤质数没滤错的话,我用你给的跑了一下['e', '5', '7', 'e', '8', '7', 'c', '3', '4', 'b', 'c', '9', '8', '1', '1', '9', '7', '5', '8', '3', '6', 'e', '3', 'f', 'd', '7', 'd', '1', '9', 'f', 'd', 'b', 'a', 'd', 'f', 'd', '1', 'e', '9', '3'] @winglight2016
winglight2016
2017-08-28 16:36:13 +08:00
@leewangyang 大神,麻烦给个算法啊,这个数组是随机的,没有算法只有结果是没用的啊

——去非质数和右移 8 位,这都很简单,没什么问题的,我只是不理解这些数字怎么转成 ASCII ?
sinalvee
2017-08-28 17:54:58 +08:00
```
[25867, 13799, 14327, 25933, 14447, 14087, 25471, 13249, 13457, 25303, 25423, 14639, 14489, 12757, 12589, 14747, 14177, 13627, 14401, 13147, 14051, 26053, 13159, 26309, 25793, 14149, 25841, 12763, 14639, 26309, 25847, 25171, 25073, 25747, 26237, 25679, 12799, 25913, 14843, 13309].map(num => num >> 8).map(num => String.fromCharCode(num))
```
winglight2016
2017-08-28 20:20:21 +08:00
@sinalvee 啊,原来是数字右移 8 位,我理解成数组右移 8 位了。。。感谢大神!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/386184

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX