2016-03-20 21 views
0

n numaralı arabellek var (çok büyük olduğunu ve dizin taşması olmayacağını varsayalım). Tamponun ilk 16 baytını karıştırmak ve bir sonraki sonraki 16 baytlık hash için bir sonraki konum olarak karma sonucunu kullanmak istiyorum, vb.javascript bir sayıya dönüştürün arabellek

var newLocation = crypto.createHash("sha256").update(buf.slice(0, 16)).digest()

newLocation aslında bir tampon türüdür: Bu kodun ilk çizgidir. buf.slice(index, 16)'a atlayabileceğim bir dizin numarasına nasıl dönüştürebileceğimi bilmek istiyorum.

cevap

0

16 BIT LE tamsayı istediğinizi varsayalım. Eğer BE isterseniz yerine readInt16BE kullanın newLocation = newLocation.readInt16LE(0);

Veya sadece, newLocation = crypto.createHash("sha256").update(buf.slice(0, 16)).digest().readInt16LE(0);

deneyin. Eğer gerçekten 16 bayt kastediyorsan


, ben 16 bayt bir tamsayı içine tampon dönüştürmek nasıl bilmiyorum.

+0

Karma değeri, N'nin değişebileceği bir N-bit sayısına eşleştirebilmem mümkün mü? Örneğin, 256 bitlik bir dizin istiyorsam, doğrudan yeni konumdan dönüşebilir miyim? Teşekkürler. – Luke

+0

16 Bayt, karma işlevine bir girdi olarak verilerin uzunluğudur. Karma değerinin uzunluğu, 32 Bayt olan 256 bittir. Sanırım kullanım sindirimi ('ikili') 256 bitlik bir ikili dizeye neden olur. Bununla birlikte, hash değerini N'nin değişebileceği bir N-bit sayısına eşleştirmem mümkün mü? Örneğin, 128 bit veya 512 bitlik bir dizin istiyorsam, doğrudan yeni konumdan dönüşebilir miyim? Teşekkürler. – Luke

+0

@LuqinWang N, 16'dan büyükse 256'dan büyük olduğunda N-bit sayısı çok büyük olabilir. Bu sayıyı bir dizinin dizini olarak kullanacağınız düşünüldüğünde, bu dizinin hafıza kapasitenizden daha büyük. Bunu neden yapmak istediğini gerçekten bilmiyorum. – Quarter2Twelve

İlgili konular