2010-01-13 5 views
1

J'ai un bus de service, et le seul moyen de transformer les données est via JavaScript. J'ai besoin de convertir un Guid en un tableau d'octets afin que je puisse le convertir en Ascii85 et le rétrécir en une chaîne de 20 caractères pour le point de terminaison client de réception.Comment convertir un Guid en un tableau Byte en Javascript?

Toutes les pensées seraient appréciées.

+0

Pourquoi at-il être en JavaScript? Il n'y a pas de valeur d'octet natif. – ChaosPandion

+0

Une pensée: "Pourquoi diable est JavaScript le seul moyen?" –

+0

Un peu dur mais votre point est toujours valable. – ChaosPandion

Répondre

1

Essayez cette (a besoin de beaucoup de tests):

var guid = "{12345678-90ab-cdef-fedc-ba0987654321}"; 
window.alert(guid + " = " + toAscii85(guid)) 

function toAscii85(guid) 
{ 
    var ascii85 = "" 
    var chars = guid.replace(/\{?(?:(\w+)-?)\}?/g, "$1"); 
    var patterns = ["$4$3$2$1", "$2$1$4$3", "$1$2$3$4", "$1$2$3$4"]; 
    for(var i=0; i < 32; i+=8) 
    { 
     var block = chars.substr(i, 8) 
      .replace(/(..)(..)(..)(..)/, patterns[i/8]) //poorman shift 
     var decValue = parseInt(block, 16); 

     var segment = "" 
     if(decValue == 0) 
     { 
      segment = "z" 
     } 
     else 
     { 
      for(var n = 4; n >= 0; n--) 
      { 
       segment = String.fromCharCode((decValue % 85) + 33) + segment; 
       decValue /= 85; 
      } 
     } 
     ascii85 += segment 
    } 
    return "<~" + ascii85 + "~>"; 
} 
Questions connexes