Hexadecimal-to-text converter
#!/usr/bin/perl -wn use strict; s/\s//g; print chr hex $1 while /([[:xdigit:]]{2})/g; print "\n";
11381 users tagging and storing useful source code snippets
Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
#!/usr/bin/perl -wn use strict; s/\s//g; print chr hex $1 while /([[:xdigit:]]{2})/g; print "\n";
//+ Jonas Raoni Soares Silva //@ http://jsfromhell.com/classes/binary-parser [v1.0] BinaryParser = function( bigEndian, allowExceptions ){ this.bigEndian = bigEndian; this.allowExceptions = allowExceptions; }; with( { p: BinaryParser.prototype } ){ with( {p: ( p.Buffer = function( bigEndian, buffer ){ this.bigEndian = bigEndian || 0; this.buffer = []; this.setBuffer( buffer ); } ).prototype } ){ p.setBuffer = function( data ){ if( data ){ for( var l, i = l = data.length, b = this.buffer = new Array( l ); i; b[l - i] = data.charCodeAt( --i ) ); this.bigEndian && b.reverse(); } }; p.hasNeededBits = function( neededBits ){ return this.buffer.length >= -( -neededBits >> 3 ); }; p.checkBuffer = function( neededBits ){ if( !this.hasNeededBits( neededBits ) ) throw new Error( "checkBuffer::missing bytes" ); }; p.readBits = function( start, length ){ //shl fix: Henri Torgemane ~1996 (compressed by Jonas Raoni) function shl( a, b ){ for( ; b--; a = ( ( a %= 0x7fffffff + 1 ) & 0x40000000 ) == 0x40000000 ? a * 2 : ( a - 0x40000000 ) * 2 + 0x7fffffff + 1 ); return a; } if( start < 0 || length <= 0 ) return 0; this.checkBuffer( start + length ); for( var offsetLeft, offsetRight = start % 8, curByte = this.buffer.length - ( start >> 3 ) - 1, lastByte = this.buffer.length + ( -( start + length ) >> 3 ), diff = curByte - lastByte, sum = ( ( this.buffer[ curByte ] >> offsetRight ) & ( ( 1 << ( diff ? 8 - offsetRight : length ) ) - 1 ) ) + ( diff && ( offsetLeft = ( start + length ) % 8 ) ? ( this.buffer[ lastByte++ ] & ( ( 1 << offsetLeft ) - 1 ) ) << ( diff-- << 3 ) - offsetRight : 0 ); diff; sum += shl( this.buffer[ lastByte++ ], ( diff-- << 3 ) - offsetRight ) ); return sum; }; } p.warn = function( msg ){ if( this.allowExceptions ) throw new Error( msg ); return 1; }; p.decodeFloat = function( data, precisionBits, exponentBits ){ var b = new this.Buffer( this.bigEndian, data ); b.checkBuffer( precisionBits + exponentBits + 1 ); var bias = Math.pow( 2, exponentBits - 1 ) - 1, signal = b.readBits( precisionBits + exponentBits, 1 ), exponent = b.readBits( precisionBits, exponentBits ), significand = 0, divisor = 2, curByte = b.buffer.length + ( -precisionBits >> 3 ) - 1; do for( var byteValue = b.buffer[ ++curByte ], startBit = precisionBits % 8 || 8, mask = 1 << startBit; mask >>= 1; ( byteValue & mask ) && ( significand += 1 / divisor ), divisor *= 2 ); while( precisionBits -= startBit ); return exponent == ( bias << 1 ) + 1 ? significand ? NaN : signal ? -Infinity : +Infinity : ( 1 + signal * -2 ) * ( exponent || significand ? !exponent ? Math.pow( 2, -bias + 1 ) * significand : Math.pow( 2, exponent - bias ) * ( 1 + significand ) : 0 ); }; p.decodeInt = function( data, bits, signed ){ var b = new this.Buffer( this.bigEndian, data ), x = b.readBits( 0, bits ), max = Math.pow( 2, bits ); return signed && x >= max / 2 ? x - max : x; }; p.encodeFloat = function( data, precisionBits, exponentBits ){ var bias = Math.pow( 2, exponentBits - 1 ) - 1, minExp = -bias + 1, maxExp = bias, minUnnormExp = minExp - precisionBits, status = isNaN( n = parseFloat( data ) ) || n == -Infinity || n == +Infinity ? n : 0, exp = 0, len = 2 * bias + 1 + precisionBits + 3, bin = new Array( len ), signal = ( n = status !== 0 ? 0 : n ) < 0, n = Math.abs( n ), intPart = Math.floor( n ), floatPart = n - intPart, i, lastBit, rounded, j, result; for( i = len; i; bin[--i] = 0 ); for( i = bias + 2; intPart && i; bin[--i] = intPart % 2, intPart = Math.floor( intPart / 2 ) ); for( i = bias + 1; floatPart > 0 && i; ( bin[++i] = ( ( floatPart *= 2 ) >= 1 ) - 0 ) && --floatPart ); for( i = -1; ++i < len && !bin[i]; ); if( bin[( lastBit = precisionBits - 1 + ( i = ( exp = bias + 1 - i ) >= minExp && exp <= maxExp ? i + 1 : bias + 1 - ( exp = minExp - 1 ) ) ) + 1] ){ if( !( rounded = bin[lastBit] ) ) for( j = lastBit + 2; !rounded && j < len; rounded = bin[j++] ); for( j = lastBit + 1; rounded && --j >= 0; ( bin[j] = !bin[j] - 0 ) && ( rounded = 0 ) ); } for( i = i - 2 < 0 ? -1 : i - 3; ++i < len && !bin[i]; ); if( ( exp = bias + 1 - i ) >= minExp && exp <= maxExp ) ++i; else if( exp < minExp ){ exp != bias + 1 - len && exp < minUnnormExp && this.warn( "encodeFloat::float underflow" ); i = bias + 1 - ( exp = minExp - 1 ); } if( intPart || status !== 0 ){ this.warn( intPart ? "encodeFloat::float overflow" : "encodeFloat::" + status ); exp = maxExp + 1; i = bias + 2; if( status == -Infinity ) signal = 1; else if( isNaN( status ) ) bin[i] = 1; } for( n = Math.abs( exp + bias ), j = exponentBits + 1, result = ""; --j; result = ( n % 2 ) + result, n = n >>= 1 ); for( n = 0, j = 0, i = ( result = ( signal ? "1" : "0" ) + result + bin.slice( i, i + precisionBits ).join( "" ) ).length, r = []; i; j = ( j + 1 ) % 8 ){ n += ( 1 << j ) * result.charAt( --i ); if( j == 7 ){ r[r.length] = String.fromCharCode( n ); n = 0; } } r[r.length] = n ? String.fromCharCode( n ) : ""; return ( this.bigEndian ? r.reverse() : r ).join( "" ); }; p.encodeInt = function( data, bits, signed ){ var max = Math.pow( 2, bits ); ( data >= max || data < -( max >> 1 ) ) && this.warn( "encodeInt::overflow" ) && ( data = 0 ); data < 0 && ( data += max ); for( var r = []; data; r[r.length] = String.fromCharCode( data % 256 ), data = Math.floor( data / 256 ) ); for( bits = -( -bits >> 3 ) - r.length; bits--; r[r.length] = "\0" ); return ( this.bigEndian ? r.reverse() : r ).join( "" ); }; p.toSmall = function( data ){ return this.decodeInt( data, 8, true ); }; p.fromSmall = function( data ){ return this.encodeInt( data, 8, true ); }; p.toByte = function( data ){ return this.decodeInt( data, 8, false ); }; p.fromByte = function( data ){ return this.encodeInt( data, 8, false ); }; p.toShort = function( data ){ return this.decodeInt( data, 16, true ); }; p.fromShort = function( data ){ return this.encodeInt( data, 16, true ); }; p.toWord = function( data ){ return this.decodeInt( data, 16, false ); }; p.fromWord = function( data ){ return this.encodeInt( data, 16, false ); }; p.toInt = function( data ){ return this.decodeInt( data, 32, true ); }; p.fromInt = function( data ){ return this.encodeInt( data, 32, true ); }; p.toDWord = function( data ){ return this.decodeInt( data, 32, false ); }; p.fromDWord = function( data ){ return this.encodeInt( data, 32, false ); }; p.toFloat = function( data ){ return this.decodeFloat( data, 23, 8 ); }; p.fromFloat = function( data ){ return this.encodeFloat( data, 23, 8 ); }; p.toDouble = function( data ){ return this.decodeFloat( data, 52, 11 ); }; p.fromDouble = function( data ){ return this.encodeFloat( data, 52, 11 ); }; }
//+ Jonas Raoni Soares Silva //@ http://jsfromhell.com/number/base-conversor [v1.0] Conversor = { h: '0123456789abcdefghijklmnopqrstuvwxyz', int2base: function( n, base ){ if( base < 2 || base > this.h.length ) throw new Error( "base inválida" ); for( var n = parseInt( n ) || 0, result = ""; n; result = this.h.charAt( n % base ) + result, n = Math.floor( n / base ) ); return result; }, base2int: function( s, base ){ for( var i = -1, l = s.length, result = 0; ++i < l; result = result * base + this.h.indexOf( s.charAt( i ) ) ); return result; } }