2013-07-03 56 views
0

這裏是模擬C#轉換爲字符串從UINT32在Javascript

BitConverter.ToUInt32(Encoding.UTF8.GetBytes(hash.Substring(i, 4)), 0) 

有沒有辦法來歸檔在Javascript中類似這樣的東西嗎?

+0

拉4個字符關的字符串將不一定導致4個字節的。我會質疑爲什麼你會有4個字節(或一個無符號整數)作爲字符串通過UTF-8編碼存儲在第一位。如果你有字節,並且需要以字符串形式存儲,它應該是base-64或hex編碼的。 –

回答

0

不是直接。簡單bitshifts並添加應該做的是:

// data[] contains 4 bytes representing an unsigned integer 
// make sure to adjust for endiannes (may need to flip order of indexes) 
var result = (data[0]<<24) + (data[1] << 16) + (data[2] << 8) + (data[3]); 

注意,沒有足夠的精度在JavaScript中的大多數實現妥善保存所有UIint64/Int64值。

0

簡單的線條像

var my_int = +(value); 

平時應該做的,比ceck出parseint等。

1

我想你可能會想抓住從字符串中的字符的原始代碼,在這種情況下,你甚至都不需要擔心的unicode問題,保持在JavaScript使用兩個字節字符每反正記:

var str="✇ƒ"; 
var br=str.slice(0,2).split("") 
     .map(function(a){return ("00000000000000000"+a.charCodeAt().toString(2)) 
     .slice(-16); }) 
var lng=parseInt(br.join(""),2); 
var andBack = ("00000000000000000" + lng.toString(2)) 
    .slice(-32) 
    .split(/^(\w{16})/) 
    .filter(Boolean) 
    .map(function(a){return String.fromCharCode(parseInt(a,2))}) 
    .join(""); 


alert([str, br, lng, andBack].join("\n")) 

/* shows: 
✇ƒ 
0010011100000111,0000000110010010 
654770578 
✇ƒ  
*/ 
0
function utf8encode(str) { 
    var encoded = unescape(encodeURIComponent(str)), 
     ret = new Uint8Array(encoded.length); 

    for(var i = 0, len = encoded.length; i < len; ++i) { 
     ret[i] = encoded.charCodeAt(i); 
    } 
    return ret;  
} 

var uint32 = new Uint32Array(utf8encode(hash.substring(i, 4)).buffer)[0]; 

例如有:

var hash = "aosdasokda", i = 0; 

uint321685286753小端機器上1634693988上大è ndian。 C# BitConverter as well存在同樣的不一致性,我認爲必須複製。

這裏是模擬BitConverter.isLittleEndian

function isLittleEndian() { 
    var v = new Uint16Array(1), 
     r = new Uint8Array(v); 
    v[0] = 0xFF00; 
    return r[0] === 0x00; 
}