簡體   English   中英

從Javascript中的字符串轉換為uint32

[英]Convert to uint32 from string in Javascript

這是模擬C#

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

有沒有辦法在Javascript中歸檔與此類似的內容?

我認為您可能想從字符串中獲取原始字符代碼,在這種情況下,您甚至不必擔心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
✇ƒ     
*/

不直接。 簡單的移位和添加應該做到這一點:

// 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值。

一條簡單的線像

var my_int = +(value);

通常應該做的,而不是簡化parseint

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的大端。 C#BitConverter上也存在相同的不一致之處,我認為必須將其復制。

這類似於BitConverter.isLittleEndian

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM