
正文
js中将 整数转成字符,,将unicode 编码后的字符还原出来的方法。
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
一、将整数转成字符:
String.fromCharCode(17496>>8,17496&0xFF,19504>>8,19504&0xFF,12848>>8,12848&0xFF,13360>>8,13360&0xFF,17969>>8,17969&0xFF,12592>>8,12592&0xFF,12337>>8,12337&0xFF,14592>>8,14592&0xFF)
//结果:DXL02040F110019
二、将json传过来的数据, unicode 编码的字符转成普通字符:
function ascii2native(asciicode) {
asciicode = asciicode.split("\\u");
var nativeValue = asciicode[0];
for (var i = 1; i < asciicode.length; i++) {
var code = asciicode[i];
nativeValue += String.fromCharCode(parseInt("0x" + code.substring(0, 4)));
if (code.length > 4) {
nativeValue += code.substring(4, code.length);
}
}
return nativeValue;
}
//调用
ascii2native("D\u0000\u0000\u0000X\u0000\u0000\u0000L\u0000\u0000\u00000\u0000\u0000\u00002\u0000\u0000\u00000\u0000\u0000\u00004\u0000\u0000\u00000\u0000\u0000\u0000F\u0000\u0000\u00001\u0000\u0000\u00001\u0000\u0000\u00000\u0000\u0000\u00000\u0000\u0000\u00001\u0000\u0000\u00009\u0000\u0000\u0000\u0000\u0000\u0000\u0000")
//结果:DXL02040F110019
下面是摘抄的:
将十进制数字 97 (ASCII 字符 a)存入文件,然后读出来。
- 2
admin 2012-10-23 主要考察97在内存中,和文件中的字节序问题。还有 int char 的区别。用C语言实现:vim 1.c?12345678910111213#include <stdio.h>intmain() {FILE*fp;inta[1] = {97};// 这个数组只存放一个数:97fp =fopen("./1.data","wb");fwrite(a, 4, 1, fp);fclose(fp);return0;}gcc 1.c
hexdump -C a.out[root@localhost ~]# hexdump -C 1.data
00000000 61 00 00 00 |a...|
00000004可以看到是逆序存放的,0x61 转为十进制便是 97, 也就是 ascii 字符 a。
然后我们来从文件中读取这个值:vim 2.c?123456789101112131415161718192021222324#include <stdio.h>intmain() {FILE*fp;inta[4] = {97, 98, 99, 100};charc[16];fp =fopen("./1.data","rb");fread(c, 16, 1, fp);fclose(fp);inti;for(i=0; i<4; i++) {printf("%02x ", c[i]);}printf("\r\n------------\r\n");for(i=0; i<1; i++) {printf("%d", a[i]);}return0;}<br>gcc 2.c && ./a.out
输出:[root@localhost ~]# ./a.out
61 00 00 00
------------
97总结一下:1. 文件忠实的保存了内存中的数据,怎么读就怎么写即可。2. intel x86 litter-endian int 内存中的字节序的为逆序(char 为正序)。网络字节序,文件字节序都为正序。用PHP实现将 97 存入文件:?1234<?php$s= pack("L*", 97);file_put_contents('./1.data',$s);?>如果一次要存放一堆怎么办?pack("L*", array(97, 98, 99, 100)); // 这样是错误的!结果是 array() 转为的数值 1eval() 不利于 cache ,最好别用。实现了一个支持数组的:?123456789101112131415functionint_to_string($arr) {$s='';foreach($arras$v) {$a= sprintf('%08x',$v);$b='';// int 在内存中为逆序存放$b.=chr(base_convert(substr($a, 6, 2), 16, 10));$b.=chr(base_convert(substr($a, 4, 2), 16, 10));$b.=chr(base_convert(substr($a, 2, 2), 16, 10));$b.=chr(base_convert(substr($a, 0, 2), 16, 10));//echo $a;$s.=$b;}return$s;}





