字元>>ASCII>>16進位,這樣寫有錯嗎?
[code]<script>function change_to_asc(a){
b=""
c=0
d=""
e=""
for(i=0;i<a.length;i=i+1){
c=a.charCodeAt(i)
d=toHex(c)
e=e+d}
document.a.outit.value=e}
function toHex(f){
hex="123456789ABCDEF"
g=0
h=""
j=""
for(i=1;i!=0;i=i){
g=f%16
h=hex.charAt(g-1)
j=h+j
f=(f-g)/16
i=f}
return j}
</script>[/code]這樣寫有錯嗎??
輸入兩個字元會當機??
輸入一個不會 由於你的程式沒有編排過,所以我就不看囉。
轉 16 進位可以用 .toString(16)
所以字元轉ASCII再轉16進位可以試試看這樣:
[code js]
alert('a'.charCodeAt(0).toString(16));
[/code] 真的可以耶……可以寫一個範例function給我看嗎?最後輸出到文字方塊裡 其實我不太清楚你的需求耶,可以再描述一下並提供一個範例嗎?
例如 abcde 這個字串你想得到什麼樣的結果呢? 我想……
取得字串
逐一取出字元
轉成16進位的ASCII碼
拼回成字串
輸出 [code js]
function bin2hex(s){
// http://kevin.vanzonneveld.net
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + bugfixed by: Onno Marsman
// + bugfixed by: Linuxworld
// * example 1: bin2hex('Kev');
// * returns 1: '4b6576'
// * example 2: bin2hex(String.fromCharCode(0x00));
// * returns 2: '00'
var ii, f = 0, a = [];
s += '';
f = s.length;
for (ii = 0; ii<f; ii++) {
a[ii] = s.charCodeAt(ii).toString(16).replace(/^([\da-f])$/,"0$1");
}
return a.join('');
}[/code]
我找了一段別人寫的 code,試試看。
用法:
[code js:nocontrols]
bin2hex('jsgears.com');
[/code] 成功了!但有些看不太懂
.replace(/^([\da-f])$/,"0$1")
a.join('')
這是什麼? [code js]
.replace(/^([\da-f])$/,"0$1")
[/code]
這是把轉換後只剩一個字元長度的情況在左邊補零,例如 9 -> 09
正規表示式內的 [\da-f] 是數字或 a~f
[code js]
a.join('')
[/code]
a 是一個陣列,join() 是轉成字串用的,參數 '' 表示使用空字串接起來 那……請教一下……
如果要把16進位的ASCII轉回字元該怎麼做? 另一個人寫的 function:
[code js]
// Copyright (c) 2002-2004, Ross Smith. All rights reserved.
// Licensed under the BSD or LGPL License. See license.txt for details.
var _bin2hex = [
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
];
var _hex2bin = [
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, // 0-9
0,10,11,12,13,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A-F
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,10,11,12,13,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, // a-f
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
];
function bin2hex(str) {
var len = str.length;
var rv = '';
var i = 0;
var c;
while (len-- > 0) {
c = str.charCodeAt(i++);
rv += _bin2hex[(c & 0xf0) >> 4];
rv += _bin2hex[(c & 0x0f)];
}
return rv;
}
function hex2bin(str) {
var len = str.length;
var rv = '';
var i = 0;
var c1;
var c2;
while (len > 1) {
h1 = str.charAt(i++);
c1 = h1.charCodeAt(0);
h2 = str.charAt(i++);
c2 = h2.charCodeAt(0);
rv += String.fromCharCode((_hex2bin[c1] << 4) + _hex2bin[c2]);
len -= 2;
}
return rv;
}
[/code] 這我更看不懂了……我記得不是有現成的函數嗎?……parseInt 直接用上面那一段的話,你就只需要呼叫 bin2hex() 由字串轉 16 進位字串,再用 hex2bin() 就可以轉回原字串。
如果要自己用 parseInt() 去轉也是可以,但是得將字串拆成長度 2 的字串,在前面加上0x 再以 parseInt() 轉回 ascii code,再用 String.fromCharCode() 轉回原來的字元。 ok了!謝謝![b][/b]
頁:
[1]