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)存入文件,然后读出来。

admin   2012-10-23
 2
主要考察97在内存中,和文件中的字节序问题。
还有 int char 的区别。
 
用C语言实现:
 
vim 1.c
?
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main() {
         FILE *fp;
         int a[1] = {97}; // 这个数组只存放一个数:97
 
         fp = fopen ( "./1.data" , "wb" );
         fwrite (a, 4, 1, fp);
         fclose (fp);
 
         return 0;
 
}
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
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main() {
         FILE *fp;
         int a[4] = {97, 98, 99, 100};
         char c[16];
 
         fp = fopen ( "./1.data" , "rb" );
         fread (c, 16, 1, fp);
         fclose (fp);
 
         int i;
         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]);
         }
         return 0;
 
}<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 存入文件:
?
1
2
3
4
<?php
$s = pack( "L*" , 97);
file_put_contents ( './1.data' , $s );
?>
如果一次要存放一堆怎么办?
pack("L*", array(97, 98, 99, 100)); // 这样是错误的!结果是 array() 转为的数值 1
eval() 不利于 cache ,最好别用。
 
实现了一个支持数组的:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function int_to_string( $arr ) {
         $s = '' ;
         foreach ( $arr as $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 ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值