# d2b.py # # Decimal to byte(s) and character/string to byte(s) converter. # Any decimal number from 0 to 255 converted to b"\x??" format. # Any standard ASCII string, something like "\x00Some String.\xFF" converted # to b"\x00Some String.\xff". NOTE:- "FF" is displayed as "ff" on conversion # but the end result is the same. # # NOTE:- The reverse, b"\x00Some String.\xff" converted to # "\x00Some String.\xff", is easy and therefore not included in this function. # # What I needed...... # The function, sometext=chr(a+b), (where "a" could be for example 127 and # "b" in this case is -127<=b<=128), capability is not easily possible with the # b"string" byte(s) format so this function was devised. # # See here for an example of chr(a+b):- # http://code.activestate.com/recipes/578013-amplitude-modulation-tremolo-was-an-audiosound-sni/?in=lang-python # # This new function uses NO import(s), nor any special programming style, # but is written so that anyone can understand, (including kids), how it works. # It does NOT need any special encoding or any other "Pythonic" requirements at all. # It is not "elegant", as professionals may call it, but, it is functional. # # I have no idea at all as to the upper limit of ASCII string length it can # handle, however it CAN handle a(n) "", (empty), string. # # ========================================================================== # # Python 3.1.3 (r313:86834, Nov 28 2010, 10:01:07) # [GCC 4.4.5] on linux2 # Type "help", "copyright", "credits" or "license" for more information. # >>> exec(open('/home/G0LCU/Desktop/Code/d2b.py').read()) # >>> a=78 # >>> type(a) # <class 'int'> # >>> b=d2b(a) # >>> print(b) # b'N' # >>> type(b) # <class 'bytes'> # >>> text="\x00(C)2012, B.Walker, G0LCU.\xFF" # >>> len(text) # 27 # >>> type(text) # <class 'str'> # >>> newtext=t2b(text) # >>> len(newtext) # 27 # >>> print(newtext) # b'\x00(C)2012, B.Walker, G0LCU.\xff' # >>> type(newtext) # <class 'bytes'> # # ============================================================================ # # Copyright, (C)2012, B.Walker, G0LCU. # Issued under GPL2 licence... # Enjoy finding simple solutions to often very difficult problems. # # Requires Python Version 3.x.x only. # Tested on Debian 6.0.0 using Python 3.1.3, and PCLinuxOS 2009 using Python 3.2.1. # Also Tested on MS Windows Vista, 32 bit, using Python 3.0.1 and Python 3.2.2. # Decimal number to byte(s) string converter. def d2b(a,b=0): # "a" any decimal number between 0 to 255. # "b" is reserved, but for my usage is very useful, see above... ;o) # Don't allow any floating point numbers. a=int(a) b=int(b) decimal=a+b # Out of range checks forcing function to exit! if decimal<=-1 or decimal>=256: print("\nError in d2b(a,b=0) function, decimal integer out of range, (0 to 255)!\n") # FORCE a Python error to stop the function from proceeding; "FORCED_HALT" IS NOT DEFINED! print(FORCED_HALT) # Convert new decimal value 0 to 255 to b"\x??" value. if decimal==0: newbyte=b"\x00" if decimal==1: newbyte=b"\x01" if decimal==2: newbyte=b"\x02" if decimal==3: newbyte=b"\x03" if decimal==4: newbyte=b"\x04" if decimal==5: newbyte=b"\x05" if decimal==6: newbyte=b"\x06" if decimal==7: newbyte=b"\x07" if decimal==8: newbyte=b"\x08" if decimal==9: newbyte=b"\x09" if decimal==10: newbyte=b"\x0A" if decimal==11: newbyte=b"\x0B" if decimal==12: newbyte=b"\x0C" if decimal==13: newbyte=b"\x0D" if decimal==14: newbyte=b"\x0E" if decimal==15: newbyte=b"\x0F" if decimal==16: newbyte=b"\x10" if decimal==17: newbyte=b"\x11" if decimal==18: newbyte=b"\x12" if decimal==19: newbyte=b"\x13" if decimal==20: newbyte=b"\x14" if decimal==21: newbyte=b"\x15" if decimal==22: newbyte=b"\x16" if decimal==23: newbyte=b"\x17" if decimal==24: newbyte=b"\x18" if decimal==25: newbyte=b"\x19" if decimal==26: newbyte=b"\x1A" if decimal==27: newbyte=b"\x1B" if decimal==28: newbyte=b"\x1C" if decimal==29: newbyte=b"\x1D" if decimal==30: newbyte=b"\x1E" if decimal==31: newbyte=b"\x1F" if decimal==32: newbyte=b"\x20" if decimal==33: newbyte=b"\x21" if decimal==34: newbyte=b"\x22" if decimal==35: newbyte=b"\x23" if decimal==36: newbyte=b"\x24" if decimal==37: newbyte=b"\x25" if decimal==38: newbyte=b"\x26" if decimal==39: newbyte=b"\x27" if decimal==40: newbyte=b"\x28" if decimal==41: newbyte=b"\x29" if decimal==42: newbyte=b"\x2A" if decimal==43: newbyte=b"\x2B" if decimal==44: newbyte=b"\x2C" if decimal==45: newbyte=b"\x2D" if decimal==46: newbyte=b"\x2E" if decimal==47: newbyte=b"\x2F" if decimal==48: newbyte=b"\x30" if decimal==49: newbyte=b"\x31" if decimal==50: newbyte=b"\x32" if decimal==51: newbyte=b"\x33" if decimal==52: newbyte=b"\x34" if decimal==53: newbyte=b"\x35" if decimal==54: newbyte=b"\x36" if decimal==55: newbyte=b"\x37" if decimal==56: newbyte=b"\x38" if decimal==57: newbyte=b"\x39" if decimal==58: newbyte=b"\x3A" if decimal==59: newbyte=b"\x3B" if decimal==60: newbyte=b"\x3C" if decimal==61: newbyte=b"\x3D" if decimal==62: newbyte=b"\x3E" if decimal==63: newbyte=b"\x3F" if decimal==64: newbyte=b"\x40" if decimal==65: newbyte=b"\x41" if decimal==66: newbyte=b"\x42" if decimal==67: newbyte=b"\x43" if decimal==68: newbyte=b"\x44" if decimal==69: newbyte=b"\x45" if decimal==70: newbyte=b"\x46" if decimal==71: newbyte=b"\x47" if decimal==72: newbyte=b"\x48" if decimal==73: newbyte=b"\x49" if decimal==74: newbyte=b"\x4A" if decimal==75: newbyte=b"\x4B" if decimal==76: newbyte=b"\x4C" if decimal==77: newbyte=b"\x4D" if decimal==78: newbyte=b"\x4E" if decimal==79: newbyte=b"\x4F" if decimal==80: newbyte=b"\x50" if decimal==81: newbyte=b"\x51" if decimal==82: newbyte=b"\x52" if decimal==83: newbyte=b"\x53" if decimal==84: newbyte=b"\x54" if decimal==85: newbyte=b"\x55" if decimal==86: newbyte=b"\x56" if decimal==87: newbyte=b"\x57" if decimal==88: newbyte=b"\x58" if decimal==89: newbyte=b"\x59" if decimal==90: newbyte=b"\x5A" if decimal==91: newbyte=b"\x5B" if decimal==92: newbyte=b"\x5C" if decimal==93: newbyte=b"\x5D" if decimal==94: newbyte=b"\x5E" if decimal==95: newbyte=b"\x5F" if decimal==96: newbyte=b"\x60" if decimal==97: newbyte=b"\x61" if decimal==98: newbyte=b"\x62" if decimal==99: newbyte=b"\x63" if decimal==100: newbyte=b"\x64" if decimal==101: newbyte=b"\x65" if decimal==102: newbyte=b"\x66" if decimal==103: newbyte=b"\x67" if decimal==104: newbyte=b"\x68" if decimal==105: newbyte=b"\x69" if decimal==106: newbyte=b"\x6A" if decimal==107: newbyte=b"\x6B" if decimal==108: newbyte=b"\x6C" if decimal==109: newbyte=b"\x6D" if decimal==110: newbyte=b"\x6E" if decimal==111: newbyte=b"\x6F" if decimal==112: newbyte=b"\x70" if decimal==113: newbyte=b"\x71" if decimal==114: newbyte=b"\x72" if decimal==115: newbyte=b"\x73" if decimal==116: newbyte=b"\x74" if decimal==117: newbyte=b"\x75" if decimal==118: newbyte=b"\x76" if decimal==119: newbyte=b"\x77" if decimal==120: newbyte=b"\x78" if decimal==121: newbyte=b"\x79" if decimal==122: newbyte=b"\x7A" if decimal==123: newbyte=b"\x7B" if decimal==124: newbyte=b"\x7C" if decimal==125: newbyte=b"\x7D" if decimal==126: newbyte=b"\x7E" if decimal==127: newbyte=b"\x7F" if decimal==128: newbyte=b"\x80" if decimal==129: newbyte=b"\x81" if decimal==130: newbyte=b"\x82" if decimal==131: newbyte=b"\x83" if decimal==132: newbyte=b"\x84" if decimal==133: newbyte=b"\x85" if decimal==134: newbyte=b"\x86" if decimal==135: newbyte=b"\x87" if decimal==136: newbyte=b"\x88" if decimal==137: newbyte=b"\x89" if decimal==138: newbyte=b"\x8A" if decimal==139: newbyte=b"\x8B" if decimal==140: newbyte=b"\x8C" if decimal==141: newbyte=b"\x8D" if decimal==142: newbyte=b"\x8E" if decimal==143: newbyte=b"\x8F" if decimal==144: newbyte=b"\x90" if decimal==145: newbyte=b"\x91" if decimal==146: newbyte=b"\x92" if decimal==147: newbyte=b"\x93" if decimal==148: newbyte=b"\x94" if decimal==149: newbyte=b"\x95" if decimal==150: newbyte=b"\x96" if decimal==151: newbyte=b"\x97" if decimal==152: newbyte=b"\x98" if decimal==153: newbyte=b"\x99" if decimal==154: newbyte=b"\x9A" if decimal==155: newbyte=b"\x9B" if decimal==156: newbyte=b"\x9C" if decimal==157: newbyte=b"\x9D" if decimal==158: newbyte=b"\x9E" if decimal==159: newbyte=b"\x9F" if decimal==160: newbyte=b"\xA0" if decimal==161: newbyte=b"\xA1" if decimal==162: newbyte=b"\xA2" if decimal==163: newbyte=b"\xA3" if decimal==164: newbyte=b"\xA4" if decimal==165: newbyte=b"\xA5" if decimal==166: newbyte=b"\xA6" if decimal==167: newbyte=b"\xA7" if decimal==168: newbyte=b"\xA8" if decimal==169: newbyte=b"\xA9" if decimal==170: newbyte=b"\xAA" if decimal==171: newbyte=b"\xAB" if decimal==172: newbyte=b"\xAC" if decimal==173: newbyte=b"\xAD" if decimal==174: newbyte=b"\xAE" if decimal==175: newbyte=b"\xAF" if decimal==176: newbyte=b"\xB0" if decimal==177: newbyte=b"\xB1" if decimal==178: newbyte=b"\xB2" if decimal==179: newbyte=b"\xB3" if decimal==180: newbyte=b"\xB4" if decimal==181: newbyte=b"\xB5" if decimal==182: newbyte=b"\xB6" if decimal==183: newbyte=b"\xB7" if decimal==184: newbyte=b"\xB8" if decimal==185: newbyte=b"\xB9" if decimal==186: newbyte=b"\xBA" if decimal==187: newbyte=b"\xBB" if decimal==188: newbyte=b"\xBC" if decimal==189: newbyte=b"\xBD" if decimal==190: newbyte=b"\xBE" if decimal==191: newbyte=b"\xBF" if decimal==192: newbyte=b"\xC0" if decimal==193: newbyte=b"\xC1" if decimal==194: newbyte=b"\xC2" if decimal==195: newbyte=b"\xC3" if decimal==196: newbyte=b"\xC4" if decimal==197: newbyte=b"\xC5" if decimal==198: newbyte=b"\xC6" if decimal==199: newbyte=b"\xC7" if decimal==200: newbyte=b"\xC8" if decimal==201: newbyte=b"\xC9" if decimal==202: newbyte=b"\xCA" if decimal==203: newbyte=b"\xCB" if decimal==204: newbyte=b"\xCC" if decimal==205: newbyte=b"\xCD" if decimal==206: newbyte=b"\xCE" if decimal==207: newbyte=b"\xCF" if decimal==208: newbyte=b"\xD0" if decimal==209: newbyte=b"\xD1" if decimal==210: newbyte=b"\xD2" if decimal==211: newbyte=b"\xD3" if decimal==212: newbyte=b"\xD4" if decimal==213: newbyte=b"\xD5" if decimal==214: newbyte=b"\xD6" if decimal==215: newbyte=b"\xD7" if decimal==216: newbyte=b"\xD8" if decimal==217: newbyte=b"\xD9" if decimal==218: newbyte=b"\xDA" if decimal==219: newbyte=b"\xDB" if decimal==220: newbyte=b"\xDC" if decimal==221: newbyte=b"\xDD" if decimal==222: newbyte=b"\xDE" if decimal==223: newbyte=b"\xDF" if decimal==224: newbyte=b"\xE0" if decimal==225: newbyte=b"\xE1" if decimal==226: newbyte=b"\xE2" if decimal==227: newbyte=b"\xE3" if decimal==228: newbyte=b"\xE4" if decimal==229: newbyte=b"\xE5" if decimal==230: newbyte=b"\xE6" if decimal==231: newbyte=b"\xE7" if decimal==232: newbyte=b"\xE8" if decimal==233: newbyte=b"\xE9" if decimal==234: newbyte=b"\xEA" if decimal==235: newbyte=b"\xEB" if decimal==236: newbyte=b"\xEC" if decimal==237: newbyte=b"\xED" if decimal==238: newbyte=b"\xEE" if decimal==239: newbyte=b"\xEF" if decimal==240: newbyte=b"\xF0" if decimal==241: newbyte=b"\xF1" if decimal==242: newbyte=b"\xF2" if decimal==243: newbyte=b"\xF3" if decimal==244: newbyte=b"\xF4" if decimal==245: newbyte=b"\xF5" if decimal==246: newbyte=b"\xF6" if decimal==247: newbyte=b"\xF7" if decimal==248: newbyte=b"\xF8" if decimal==249: newbyte=b"\xF9" if decimal==250: newbyte=b"\xFA" if decimal==251: newbyte=b"\xFB" if decimal==252: newbyte=b"\xFC" if decimal==253: newbyte=b"\xFD" if decimal==254: newbyte=b"\xFE" if decimal==255: newbyte=b"\xFF" return(newbyte) # Text/Character string to byte(s) string converter. # "some_string" is any ASCII string including "\x??" characters as required. def t2b(some_string): # Allocate an empty byte(s) string. new_byte_string=b"" # Use the loop to build the byte(s) string from a standard string. for n in range(0,len(some_string),1): # Convert each _character_ in the string to a decimal number. decimal_number=ord(some_string[n]) # Call the "d2b()" above function. d2b_character=d2b(decimal_number) # Build the byte(s) string one character at a time. new_byte_string=new_byte_string+d2b_character # The complete byte(s) string has now been converted. return(new_byte_string) # End of d2b() function... # Enjoy finding simple solutions to often very difficult problems... ;o)