返回列表 發帖

字元>>ASCII>>16進位,這樣寫有錯嗎?

<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>
這樣寫有錯嗎??
輸入兩個字元會當機??
輸入一個不會
I.WON'T.DIE

由於你的程式沒有編排過,所以我就不看囉。

轉 16 進位可以用 .toString(16)

所以字元轉ASCII再轉16進位可以試試看這樣:
alert('a'.charCodeAt(0).toString(16));
To infinity and beyond!

TOP

真的可以耶……可以寫一個範例function給我看嗎?最後輸出到文字方塊裡

TOP

其實我不太清楚你的需求耶,可以再描述一下並提供一個範例嗎?
例如 abcde 這個字串你想得到什麼樣的結果呢?
To infinity and beyond!

TOP

我想……
取得字串
逐一取出字元
轉成16進位的ASCII碼
拼回成字串
輸出

TOP

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,試試看。

用法:
bin2hex('jsgears.com');
To infinity and beyond!

TOP

成功了!但有些看不太懂
.replace(/^([\da-f])$/,"0$1")
a.join('')
這是什麼?

TOP

.replace(/^([\da-f])$/,"0$1")
這是把轉換後只剩一個字元長度的情況在左邊補零,例如 9 -> 09
正規表示式內的 [\da-f] 是數字或 a~f
a.join('')
a 是一個陣列,join() 是轉成字串用的,參數 '' 表示使用空字串接起來
To infinity and beyond!

TOP

那……請教一下……
如果要把16進位的ASCII轉回字元該怎麼做?
I.WON'T.DIE

TOP

另一個人寫的 function:
// 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;
}
To infinity and beyond!

TOP

返回列表 回復 發帖