Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 1 | /* |
| 2 | * This class contains utilities to help parse the data |
| 3 | * author: ucla-cs |
Jeff Thompson | 745026e | 2012-10-13 12:49:20 -0700 | [diff] [blame] | 4 | * See COPYING for copyright and distribution information. |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 5 | */ |
| 6 | |
| 7 | var DataUtils = function DataUtils(){ |
| 8 | |
| 9 | |
| 10 | }; |
| 11 | |
| 12 | |
| 13 | /* |
| 14 | * NOTE THIS IS CURRENTLY NOT BEHING USED |
| 15 | * |
| 16 | */ |
| 17 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 18 | DataUtils.keyStr = "ABCDEFGHIJKLMNOP" + |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 19 | "QRSTUVWXYZabcdef" + |
| 20 | "ghijklmnopqrstuv" + |
| 21 | "wxyz0123456789+/" + |
| 22 | "="; |
| 23 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 24 | |
| 25 | /** |
| 26 | * Raw String to Base 64 |
| 27 | */ |
Meki Cherkaoui | b21911b | 2012-05-18 16:54:37 -0700 | [diff] [blame] | 28 | DataUtils.stringtoBase64=function stringtoBase64(input) { |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 29 | input = escape(input); |
| 30 | var output = ""; |
| 31 | var chr1, chr2, chr3 = ""; |
| 32 | var enc1, enc2, enc3, enc4 = ""; |
| 33 | var i = 0; |
| 34 | |
| 35 | do { |
| 36 | chr1 = input.charCodeAt(i++); |
| 37 | chr2 = input.charCodeAt(i++); |
| 38 | chr3 = input.charCodeAt(i++); |
| 39 | |
| 40 | enc1 = chr1 >> 2; |
| 41 | enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); |
| 42 | enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); |
| 43 | enc4 = chr3 & 63; |
| 44 | |
| 45 | if (isNaN(chr2)) { |
| 46 | enc3 = enc4 = 64; |
| 47 | } else if (isNaN(chr3)) { |
| 48 | enc4 = 64; |
| 49 | } |
| 50 | |
| 51 | output = output + |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 52 | DataUtils.keyStr.charAt(enc1) + |
| 53 | DataUtils.keyStr.charAt(enc2) + |
| 54 | DataUtils.keyStr.charAt(enc3) + |
| 55 | DataUtils.keyStr.charAt(enc4); |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 56 | chr1 = chr2 = chr3 = ""; |
| 57 | enc1 = enc2 = enc3 = enc4 = ""; |
| 58 | } while (i < input.length); |
| 59 | |
| 60 | return output; |
| 61 | } |
| 62 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 63 | /** |
| 64 | * Base 64 to Raw String |
| 65 | */ |
Meki Cherkaoui | b21911b | 2012-05-18 16:54:37 -0700 | [diff] [blame] | 66 | DataUtils.base64toString = function base64toString(input) { |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 67 | var output = ""; |
| 68 | var chr1, chr2, chr3 = ""; |
| 69 | var enc1, enc2, enc3, enc4 = ""; |
| 70 | var i = 0; |
| 71 | |
| 72 | // remove all characters that are not A-Z, a-z, 0-9, +, /, or = |
| 73 | var base64test = /[^A-Za-z0-9\+\/\=]/g; |
Jeff Thompson | 7495797 | 2012-10-07 21:14:32 -0700 | [diff] [blame] | 74 | /* Test for invalid characters. */ |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 75 | if (base64test.exec(input)) { |
| 76 | alert("There were invalid base64 characters in the input text.\n" + |
| 77 | "Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\n" + |
| 78 | "Expect errors in decoding."); |
| 79 | } |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 80 | |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 81 | input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); |
| 82 | |
| 83 | do { |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 84 | enc1 = DataUtils.keyStr.indexOf(input.charAt(i++)); |
| 85 | enc2 = DataUtils.keyStr.indexOf(input.charAt(i++)); |
| 86 | enc3 = DataUtils.keyStr.indexOf(input.charAt(i++)); |
| 87 | enc4 = DataUtils.keyStr.indexOf(input.charAt(i++)); |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 88 | |
| 89 | chr1 = (enc1 << 2) | (enc2 >> 4); |
| 90 | chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); |
| 91 | chr3 = ((enc3 & 3) << 6) | enc4; |
| 92 | |
| 93 | output = output + String.fromCharCode(chr1); |
| 94 | |
| 95 | if (enc3 != 64) { |
| 96 | output = output + String.fromCharCode(chr2); |
| 97 | } |
| 98 | if (enc4 != 64) { |
| 99 | output = output + String.fromCharCode(chr3); |
| 100 | } |
| 101 | |
| 102 | chr1 = chr2 = chr3 = ""; |
| 103 | enc1 = enc2 = enc3 = enc4 = ""; |
| 104 | |
| 105 | } while (i < input.length); |
| 106 | |
| 107 | return unescape(output); |
| 108 | }; |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 109 | |
| 110 | //byte [] |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 111 | |
| 112 | /** |
| 113 | * NOT WORKING!!!!! |
| 114 | * |
| 115 | * Unsiged Long Number to Byte Array |
| 116 | */ |
| 117 | |
| 118 | /* |
| 119 | DataUtils.unsignedLongToByteArray= function( value) { |
| 120 | |
| 121 | if(LOG>4)console.log('INPUT IS '+value); |
| 122 | |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 123 | if( 0 == value ) |
| 124 | return [0]; |
| 125 | |
| 126 | if( 0 <= value && value <= 0x00FF ) { |
| 127 | //byte [] |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 128 | var bb = new Array(1); |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 129 | bb[0] = (value & 0x00FF); |
| 130 | return bb; |
| 131 | } |
| 132 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 133 | if(LOG>4) console.log('type of value is '+typeof value); |
| 134 | if(LOG>4) console.log('value is '+value); |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 135 | //byte [] |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 136 | var out = null; |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 137 | //int |
| 138 | var offset = -1; |
| 139 | for(var i = 7; i >=0; --i) { |
| 140 | //byte |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 141 | console.log(i); |
| 142 | console.log('value is '+value); |
| 143 | console.log('(value >> (i * 8)) '+ (value >> (i * 8)) ); |
| 144 | console.log(' ((value >> (i * 8)) & 0xFF) '+ ((value >> (i * 8)) & 0xFF) ); |
| 145 | |
| 146 | var b = ((value >> (i * 8)) & 0xFF) ; |
| 147 | |
| 148 | if(LOG>4) console.log('b is '+b); |
| 149 | |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 150 | if( out == null && b != 0 ) { |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 151 | //out = new byte[i+1]; |
| 152 | out = new Array(i+1); |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 153 | offset = i; |
| 154 | } |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 155 | |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 156 | if( out != null ) |
| 157 | out[ offset - i ] = b; |
| 158 | } |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 159 | if(LOG>4)console.log('OUTPUT IS '); |
| 160 | if(LOG>4)console.log(out); |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 161 | return out; |
| 162 | } |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 163 | */ |
| 164 | |
| 165 | /** |
| 166 | * NOT WORKING!!!!! |
| 167 | * |
| 168 | * Unsiged Long Number to Byte Array |
| 169 | *//* |
| 170 | DataUtils.byteArrayToUnsignedLong = function(//final byte [] |
| 171 | src) { |
| 172 | if(LOG>4) console.log('INPUT IS '); |
| 173 | if(LOG>4) console.log(src); |
| 174 | |
| 175 | var value = 0; |
| 176 | for(var i = 0; i < src.length; i++) { |
| 177 | value = value << 8; |
| 178 | // Java will assume the byte is signed, so extend it and trim it. |
| 179 | |
| 180 | |
| 181 | var b = ((src[i]) & 0xFF ); |
| 182 | value |= b; |
| 183 | } |
| 184 | |
| 185 | if(LOG>4) console.log('OUTPUT IS '); |
| 186 | |
| 187 | if(LOG>4) console.log(value); |
| 188 | |
| 189 | return value; |
| 190 | }*/ |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 191 | |
| 192 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 193 | /** |
| 194 | * Hex String to Byte Array |
| 195 | */ |
| 196 | //THIS IS NOT WORKING |
| 197 | /* |
| 198 | DataUtils.HexStringtoByteArray = function(str) { |
Meki Cherkaoui | abb973b | 2012-05-09 14:25:57 -0700 | [diff] [blame] | 199 | var byteArray = []; |
| 200 | for (var i = 0; i < str.length; i++) |
| 201 | if (str.charCodeAt(i) <= 0x7F) |
| 202 | byteArray.push(str.charCodeAt(i)); |
| 203 | else { |
| 204 | var h = encodeURIComponent(str.charAt(i)).substr(1).split('%'); |
| 205 | for (var j = 0; j < h.length; j++) |
| 206 | byteArray.push(parseInt(h[j], 16)); |
| 207 | } |
| 208 | return byteArray; |
| 209 | }; |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 210 | */ |
| 211 | |
| 212 | /** |
| 213 | * Byte Array to Hex String |
| 214 | */ |
| 215 | DataUtils.byteArrayToHexString = function(byteArray) { |
Meki Cherkaoui | abb973b | 2012-05-09 14:25:57 -0700 | [diff] [blame] | 216 | var str = ''; |
| 217 | for (var i = 0; i < byteArray.length; i++) |
| 218 | str += byteArray[i] <= 0x7F? |
| 219 | byteArray[i] === 0x25 ? "%25" : // % |
| 220 | String.fromCharCode(byteArray[i]) : |
| 221 | "%" + byteArray[i].toString(16).toUpperCase(); |
| 222 | return decodeURIComponent(str); |
| 223 | }; |
Meki Cherkaoui | f441d3a | 2012-04-22 15:17:52 -0700 | [diff] [blame] | 224 | |
| 225 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 226 | /** |
| 227 | * Byte array to Hex String |
| 228 | */ |
Meki Cherkaoui | b21911b | 2012-05-18 16:54:37 -0700 | [diff] [blame] | 229 | //http://ejohn.org/blog/numbers-hex-and-colors/ |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 230 | DataUtils.toHex = function(arguments){ |
Jeff Thompson | 8b44aa1 | 2012-11-11 18:39:47 -0800 | [diff] [blame^] | 231 | if (LOG>4) console.log('ABOUT TO CONVERT '+ arguments); |
| 232 | //console.log(arguments); |
| 233 | var ret = ""; |
| 234 | for ( var i = 0; i < arguments.length; i++ ) |
| 235 | ret += (arguments[i] < 16 ? "0" : "") + arguments[i].toString(16); |
| 236 | if (LOG>4) console.log('Converted to: ' + ret); |
| 237 | return ret; //.toUpperCase(); |
Meki Cherkaoui | b21911b | 2012-05-18 16:54:37 -0700 | [diff] [blame] | 238 | } |
| 239 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 240 | /** |
Jeff Thompson | a566e79 | 2012-10-06 21:46:34 -0700 | [diff] [blame] | 241 | * Raw string to hex string. |
| 242 | */ |
| 243 | DataUtils.stringToHex = function(arguments){ |
| 244 | var ret = ""; |
| 245 | for (var i = 0; i < arguments.length; ++i) { |
| 246 | var value = arguments.charCodeAt(i); |
| 247 | ret += (value < 16 ? "0" : "") + value.toString(16); |
| 248 | } |
| 249 | return ret; |
| 250 | } |
| 251 | |
| 252 | /** |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 253 | * Byte array to raw string |
| 254 | */ |
Meki Cherkaoui | b21911b | 2012-05-18 16:54:37 -0700 | [diff] [blame] | 255 | //DOES NOT SEEM TO WORK |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 256 | DataUtils.toString = function(arguments){ |
Meki Cherkaoui | b21911b | 2012-05-18 16:54:37 -0700 | [diff] [blame] | 257 | //console.log(arguments); |
| 258 | var ret = ""; |
| 259 | for ( var i = 0; i < arguments.length; i++ ) |
| 260 | ret += String.fromCharCode(arguments[i]); |
| 261 | return ret; |
| 262 | } |
| 263 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 264 | /** |
| 265 | * Hex String to byte array |
| 266 | */ |
| 267 | DataUtils.toNumbers=function( str ){ |
Meki Cherkaoui | b21911b | 2012-05-18 16:54:37 -0700 | [diff] [blame] | 268 | if(typeof str =='string'){ |
| 269 | var ret = []; |
| 270 | str.replace(/(..)/g, function(str){ |
| 271 | ret.push( parseInt( str, 16 ) ); |
| 272 | }); |
| 273 | return ret; |
| 274 | } |
| 275 | } |
| 276 | |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 277 | /** |
Jeff Thompson | 7495797 | 2012-10-07 21:14:32 -0700 | [diff] [blame] | 278 | * Hex String to raw string. |
| 279 | */ |
| 280 | DataUtils.hexToRawString = function(str) { |
| 281 | if(typeof str =='string') { |
| 282 | var ret = ""; |
| 283 | str.replace(/(..)/g, function(s) { |
| 284 | ret += String.fromCharCode(parseInt(s, 16)); |
| 285 | }); |
| 286 | return ret; |
| 287 | } |
| 288 | } |
| 289 | |
| 290 | /** |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 291 | * Raw String to Byte Array |
| 292 | */ |
| 293 | DataUtils.toNumbersFromString = function( str ){ |
Meki Cherkaoui | b21911b | 2012-05-18 16:54:37 -0700 | [diff] [blame] | 294 | var bytes = new Array(str.length); |
| 295 | for(var i=0;i<str.length;i++) |
| 296 | bytes[i] = str.charCodeAt(i); |
| 297 | return bytes; |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 298 | } |
| 299 | |
| 300 | DataUtils.encodeUtf8 = function (string) { |
| 301 | string = string.replace(/\r\n/g,"\n"); |
| 302 | var utftext = ""; |
| 303 | |
| 304 | for (var n = 0; n < string.length; n++) { |
| 305 | |
| 306 | var c = string.charCodeAt(n); |
| 307 | |
| 308 | if (c < 128) { |
| 309 | utftext += String.fromCharCode(c); |
| 310 | } |
| 311 | else if((c > 127) && (c < 2048)) { |
| 312 | utftext += String.fromCharCode((c >> 6) | 192); |
| 313 | utftext += String.fromCharCode((c & 63) | 128); |
| 314 | } |
| 315 | else { |
| 316 | utftext += String.fromCharCode((c >> 12) | 224); |
| 317 | utftext += String.fromCharCode(((c >> 6) & 63) | 128); |
| 318 | utftext += String.fromCharCode((c & 63) | 128); |
| 319 | } |
| 320 | |
| 321 | } |
| 322 | |
| 323 | return utftext; |
| 324 | }; |
| 325 | |
| 326 | // public method for url decoding |
| 327 | DataUtils.decodeUtf8 = function (utftext) { |
| 328 | var string = ""; |
| 329 | var i = 0; |
Jeff Thompson | deda95e | 2012-10-21 19:17:56 -0700 | [diff] [blame] | 330 | var c = 0; |
| 331 | var c1 = 0; |
| 332 | var c2 = 0; |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 333 | |
| 334 | while ( i < utftext.length ) { |
| 335 | |
| 336 | c = utftext.charCodeAt(i); |
| 337 | |
| 338 | if (c < 128) { |
| 339 | string += String.fromCharCode(c); |
| 340 | i++; |
| 341 | } |
| 342 | else if((c > 191) && (c < 224)) { |
| 343 | c2 = utftext.charCodeAt(i+1); |
| 344 | string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); |
| 345 | i += 2; |
| 346 | } |
| 347 | else { |
| 348 | c2 = utftext.charCodeAt(i+1); |
Jeff Thompson | deda95e | 2012-10-21 19:17:56 -0700 | [diff] [blame] | 349 | var c3 = utftext.charCodeAt(i+2); |
Meki Cherkaoui | 8f17361 | 2012-06-06 01:05:40 -0700 | [diff] [blame] | 350 | string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); |
| 351 | i += 3; |
| 352 | } |
| 353 | |
| 354 | } |
| 355 | |
| 356 | return string; |
| 357 | }; |
| 358 | |
| 359 | test = function(){ |
| 360 | console.log(DataUtils.decodeUtf8("HELLO.~")); |
| 361 | return DataUtils.decodeUtf8("HELLO.~"); |
| 362 | } |
| 363 | |
| 364 | //NOT WORKING |
| 365 | /* |
| 366 | DataUtils.getUTF8StringFromBytes = function(bytes) { |
| 367 | |
| 368 | bytes = toString(bytes); |
| 369 | |
| 370 | var ix = 0; |
| 371 | |
| 372 | if( bytes.slice(0,3) == "\xEF\xBB\xBF") { |
| 373 | ix = 3; |
| 374 | } |
| 375 | |
| 376 | var string = ""; |
| 377 | for( ; ix < bytes.length; ix++ ) { |
| 378 | var byte1 = bytes[ix].charCodeAt(0); |
| 379 | if( byte1 < 0x80 ) { |
| 380 | string += String.fromCharCode(byte1); |
| 381 | } else if( byte1 >= 0xC2 && byte1 < 0xE0 ) { |
| 382 | var byte2 = bytes[++ix].charCodeAt(0); |
| 383 | string += String.fromCharCode(((byte1&0x1F)<<6) + (byte2&0x3F)); |
| 384 | } else if( byte1 >= 0xE0 && byte1 < 0xF0 ) { |
| 385 | var byte2 = bytes[++ix].charCodeAt(0); |
| 386 | var byte3 = bytes[++ix].charCodeAt(0); |
| 387 | string += String.fromCharCode(((byte1&0xFF)<<12) + ((byte2&0x3F)<<6) + (byte3&0x3F)); |
| 388 | } else if( byte1 >= 0xF0 && byte1 < 0xF5) { |
| 389 | var byte2 = bytes[++ix].charCodeAt(0); |
| 390 | var byte3 = bytes[++ix].charCodeAt(0); |
| 391 | var byte4 = bytes[++ix].charCodeAt(0); |
| 392 | var codepoint = ((byte1&0x07)<<18) + ((byte2&0x3F)<<12)+ ((byte3&0x3F)<<6) + (byte4&0x3F); |
| 393 | codepoint -= 0x10000; |
| 394 | string += String.fromCharCode( |
| 395 | (codepoint>>10) + 0xD800, |
| 396 | (codepoint&0x3FF) + 0xDC00 |
| 397 | ); |
| 398 | } |
| 399 | } |
| 400 | |
| 401 | return string; |
| 402 | }*/ |
| 403 | |
Jeff Thompson | bb97609 | 2012-09-29 17:01:38 -0700 | [diff] [blame] | 404 | /** |
| 405 | * Return true if a1 and a2 are the same length with equal elements. |
| 406 | */ |
| 407 | DataUtils.arraysEqual = function(a1, a2){ |
| 408 | if (a1.length != a2.length) |
| 409 | return false; |
| 410 | |
| 411 | for (var i = 0; i < a1.length; ++i) { |
| 412 | if (a1[i] != a2[i]) |
| 413 | return false; |
| 414 | } |
| 415 | |
| 416 | return true; |
Jeff Thompson | deda95e | 2012-10-21 19:17:56 -0700 | [diff] [blame] | 417 | }; |
| 418 | |
| 419 | /* |
| 420 | * Convert the big endian byte array to an unsigned int. |
| 421 | * Don't check for overflow. |
| 422 | */ |
| 423 | DataUtils.bigEndianToUnsignedInt = function(bytes) { |
| 424 | var result = 0; |
| 425 | for (var i = 0; i < bytes.length; ++i) { |
| 426 | result <<= 8; |
| 427 | result += bytes[i]; |
| 428 | } |
| 429 | return result; |
| 430 | }; |
| 431 | |
| 432 | /* |
| 433 | * Convert the int value to a new big endian byte array and return. |
| 434 | * If value is 0 or negative, return []. |
| 435 | */ |
| 436 | DataUtils.nonNegativeIntToBigEndian = function(value) { |
| 437 | var result = []; |
| 438 | if (value <= 0) |
| 439 | return result; |
| 440 | |
| 441 | while (value != 0) { |
| 442 | result.unshift(value & 0xff); |
| 443 | value >>= 8; |
| 444 | } |
| 445 | return result; |
| 446 | }; |