2014-04-21 18 views
15

Bất kỳ ai biết đoạn mã JavaScript tốt để chuyển đổi HEX chuỗi được mã hóa thành base64 chuỗi được mã hóa?Chuyển đổi HEX sang Base64 cho JavaScript

+5

btoa ("4142434445464748494a4b4c4d4e4f505152535455565758595a" .match (/ \ w {2} /g).map(function(a){return String.fromCharCode (parseInt (a, 16));}) .join ("")) – dandavis

+0

Có một '‌ ​ '(không chiều rộng không joiner theo sau là một không gian chiều rộng bằng không) trong nhận xét @dandavis ', làm cho lỗi bị lỗi với lỗi khá khó hiểu" SyntaxError: ký tự không hợp lệ "trong Firefox và" SyntaxError: Mã thông báo không mong muốn ILLEGAL " trong Chrome. Đây là mã cố định: 'btoa (" 4142434445464748494a4b4c4d4e4f505152535455565758595a ".match (/ \ w {2}/g) .map (hàm (a) {return String.fromCharCode (parseInt (a, 16));}) .join (" "))' – waldyrious

+0

** CẬP NHẬT: ** Tôi đã thử dán một phiên bản làm việc vào bình luận trước của mình, nhưng có vẻ như đó là StackOverflow, người đang thêm các nhân vật vô hình - cái quái gì thế ?! Vì vậy, tôi đoán, bây giờ giải pháp duy nhất là thử sao chép mã vào trình chỉnh sửa hiển thị các ký tự vô hình như vậy (hãy thử https://www.diffchecker.com/ nếu bạn không có bất kỳ thao tác nào) và xóa thủ phạm. Nó sẽ làm việc sau đó. – waldyrious

Trả lời

13
if (!window.atob) { 
    var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 
    var table = tableStr.split(""); 

    window.atob = function (base64) { 
    if (/(=[^=]+|={3,})$/.test(base64)) throw new Error("String contains an invalid character"); 
    base64 = base64.replace(/=/g, ""); 
    var n = base64.length & 3; 
    if (n === 1) throw new Error("String contains an invalid character"); 
    for (var i = 0, j = 0, len = base64.length/4, bin = []; i < len; ++i) { 
     var a = tableStr.indexOf(base64[j++] || "A"), b = tableStr.indexOf(base64[j++] || "A"); 
     var c = tableStr.indexOf(base64[j++] || "A"), d = tableStr.indexOf(base64[j++] || "A"); 
     if ((a | b | c | d) < 0) throw new Error("String contains an invalid character"); 
     bin[bin.length] = ((a << 2) | (b >> 4)) & 255; 
     bin[bin.length] = ((b << 4) | (c >> 2)) & 255; 
     bin[bin.length] = ((c << 6) | d) & 255; 
    }; 
    return String.fromCharCode.apply(null, bin).substr(0, bin.length + n - 4); 
    }; 

    window.btoa = function (bin) { 
    for (var i = 0, j = 0, len = bin.length/3, base64 = []; i < len; ++i) { 
     var a = bin.charCodeAt(j++), b = bin.charCodeAt(j++), c = bin.charCodeAt(j++); 
     if ((a | b | c) > 255) throw new Error("String contains an invalid character"); 
     base64[base64.length] = table[a >> 2] + table[((a << 4) & 63) | (b >> 4)] + 
           (isNaN(b) ? "=" : table[((b << 2) & 63) | (c >> 6)]) + 
           (isNaN(b + c) ? "=" : table[c & 63]); 
    } 
    return base64.join(""); 
    }; 

} 

function hexToBase64(str) { 
    return btoa(String.fromCharCode.apply(null, 
    str.replace(/\r|\n/g, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")) 
); 
} 

function base64ToHex(str) { 
    for (var i = 0, bin = atob(str.replace(/[ \r\n]+$/, "")), hex = []; i < bin.length; ++i) { 
    var tmp = bin.charCodeAt(i).toString(16); 
    if (tmp.length === 1) tmp = "0" + tmp; 
    hex[hex.length] = tmp; 
    } 
    return hex.join(" "); 
} 
+0

Kính gửi @coder hacker, vui lòng xem câu hỏi của tôi: http://stackoverflow.com/questions/34963963/converting-a-hex-string-of-a-raw-image -to-a-hex-chuỗi-of-a-bitmap-hình ảnh-trong-java –

31

Nếu bạn đang làm việc trong Node hoặc sử dụng Browserify, bạn có thể sử dụng

var base64String = new Buffer(hexString, 'hex').toString('base64') 

hoặc

var hexString = new Buffer(base64String, 'base64').toString('hex') 
10

Các bình luận xuất sắc bởi @dandavis được sửa đổi bởi StackOverflow, và có một số các ký tự ẩn kỳ lạ.

Dưới đây là là một trong lót:

btoa("a6b580481008e60df9350de170b7e728".match(/\w{2}/g).map(function(a){return String.fromCharCode(parseInt(a, 16));}).join("")) 

hay:

function hexToBase64(hexstring) { 
    return btoa(hexstring.match(/\w{2}/g).map(function(a) { 
     return String.fromCharCode(parseInt(a, 16)); 
    }).join("")); 
} 

hexToBase64("a6b580481008e60df9350de170b7e728"); 

Cả hai trở lại:

"prWASBAI5g35NQ3hcLfnKA==" 
Các vấn đề liên quan