Python任意字符串转16, 32, 64进制的方法

Python字符串转数字

  import binascii

  s = 'test123456test'
  str_16 = binascii.b2a_hex(s.encode('utf-8')) # 字符串转16进制
  print(str_16)

  def baseN(num, b):
    return ((num == 0) and "0") or \
        (baseN(num // b, b).lstrip("0") + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])

  num_10 = int(str_16, 16) # 16进制转10进制
  print(num_10)

  str_32 = baseN(num_10, 32) # 10进制转32进制
  print(str_32)

  num_10_2 = int(str_32, 32) # 32进制转10进制
  print(num_10_2)

  num_16 = hex(num_10) # 10进制转16进制数
  print(num_16)

  ss = str_16.decode('hex') # 16进制串转字符串
  print(ss)

执行结果

7465737431323334353674657374
2360797289681380981751517517542260
1q6asrk64p36d1l6pq6asrk
2360797289681380981751517517542260
0x7465737431323334353674657374L
test123456test

10进制转n进制

def base10toN(num,n):
  """Change a to a base-n number.
  Up to base-36 is supported without special notation."""
  num_rep={10:'a',
     11:'b',
     12:'c',
     13:'d',
     14:'e',
     15:'f',
     16:'g',
     17:'h',
     18:'i',
     19:'j',
     20:'k',
     21:'l',
     22:'m',
     23:'n',
     24:'o',
     25:'p',
     26:'q',
     27:'r',
     28:'s',
     29:'t',
     30:'u',
     31:'v',
     32:'w',
     33:'x',
     34:'y',
     35:'z'}
  new_num_string=''
  current=num
  while current!=0:
    remainder=current%n
    if 36>remainder>9:
      remainder_string=num_rep[remainder]
    elif remainder>=36:
      remainder_string='('+str(remainder)+')'
    else:
      remainder_string=str(remainder)
    new_num_string=remainder_string+new_num_string
    current=current/n
  return new_num_string

进阶版

  def baseN(num, b):
    return ((num == 0) and "0") or \
       (baseN(num // b, b).lstrip("0") + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])

64进制

  def encode_b64(n):
    table = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_'
    result = []
    temp = n
    if 0 == temp:
      result.append('0')
    else:
      while 0 < temp:
        result.append(table[temp % 64])
        temp /= 64
    return ''.join([x for x in reversed(result)])

  def decode_b64(str):
    table = {"0": 0, "1": 1, "2": 2, "3": 3, "4": 4, "5": 5,
         "6": 6, "7": 7, "8": 8, "9": 9,
         "a": 10, "b": 11, "c": 12, "d": 13, "e": 14, "f": 15, "g": 16,
         "h": 17, "i": 18, "j": 19, "k": 20, "l": 21, "m": 22, "n": 23,
         "o": 24, "p": 25, "q": 26, "r": 27, "s": 28, "t": 29, "u": 30,
         "v": 31, "w": 32, "x": 33, "y": 34, "z": 35,
         "A": 36, "B": 37, "C": 38, "D": 39, "E": 40, "F": 41, "G": 42,
         "H": 43, "I": 44, "J": 45, "K": 46, "L": 47, "M": 48, "N": 49,
         "O": 50, "P": 51, "Q": 52, "R": 53, "S": 54, "T": 55, "U": 56,
         "V": 57, "W": 58, "X": 59, "Y": 60, "Z": 61,
         "-": 62, "_": 63}
    result = 0
    for i in xrange(len(str)):
      result *= 64
      result += table[str[i]]
    return result

Java字符串转数字

BigInteger integer = new BigInteger(hexString.toString(), 16);
integer.toString(32);
import java.math.BigInteger;

public class Main {
 public static void main(String[] argv) throws Exception {
  BigInteger bi = new BigInteger("1023");
  bi = new BigInteger("1111111111", 2);
  String s = bi.toString(2);
  System.out.println(s);
  bi = new BigInteger("1000", 8);

  System.out.println(s = bi.toString(8));

  bi = new BigInteger("1023");
  s = bi.toString();
  System.out.println(s);

  bi = new BigInteger("3ff", 16);
  s = bi.toString(16);
  System.out.println(s);
 }
}

以上这篇Python任意字符串转16, 32, 64进制的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python 16进制与中文相互转换的实现方法

    Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型的转为utf-8的解决办法 相信小伙伴们遇到过类似这样的问题,python2中各种头疼的转码,类似u'\xe6\x97\xa0\xe5\x90\x8d' 的编码,直接s.decode()是无法解决编码问题.尝试了无数办法,都无法解决. 最终得到完美的解决办法: s = u'\xe6\x97\xa0\xe5\x90\x8d' s2 = s.encode('raw_unicode_escape') print s2

  • Python 十六进制整数与ASCii编码字符串相互转换方法

    在使用Pyserial与STM32进行通讯时,遇到了需要将十六进制整数以Ascii码编码的字符串进行发送并且将接收到的Ascii码编码的字符串转换成十六进制整型的问题.查阅网上的资料后,均没有符合要求的,遂结合各家之长,用了以下方法. 环境 Python2.7 + Binascii模块 十六进制整数转ASCii编码字符串 # -*- coding: utf-8 -*- import binascii #16进制整数转ASCii编码字符串 a = 0x665554 b = hex(a) #转换成相

  • python3.4 将16进制转成字符串的实例

    将socket收到的16进制转成字符串 def hex_to_str(b): s = '' for i in b: s += '{0:0>2}'.format(str(hex(i))[2:]) return(s) 以上这篇python3.4 将16进制转成字符串的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)

    使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x) Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python int object, it has to define an __index__() method that returns

  • Python任意字符串转16, 32, 64进制的方法

    Python字符串转数字 import binascii s = 'test123456test' str_16 = binascii.b2a_hex(s.encode('utf-8')) # 字符串转16进制 print(str_16) def baseN(num, b): return ((num == 0) and "0") or \ (baseN(num // b, b).lstrip("0") + "0123456789abcdefghijklm

  • PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)

    本文实例讲述了PHP进制转换.分享给大家供大家参考,具体如下: 可以实现: 10进制转换2.8.16.36.62进制 2.8.16.36.62进制转换10进制 有点要注意下,2.8.16进制转换时,使用的是系统的自己的函数. 所以,不管怎么高精度转换值可能大于2147483646. 另外, 32进制低精转换,最大值:2147483646: 32进制高精转换,最大值:77309411327: 64进制高精转换,最大值:133143986175. jinzhi.php文件,自带演示功能. <?php

  • php将字符串转换成16进制的方法

    本文实例讲述了php将字符串转换成16进制的方法.分享给大家供大家参考.具体分析如下: php中可以通过bin2hex函数将字符串转换成16进制的形式输出,bin2hex()函数返回结果为ascii码 <?php $string = "Hello\tworld!\n"; print($string."\n"); print(bin2hex($string)."\n"); ?> 输出结果如下: Hello world! 48656c6c

  • php实现将任意进制数转换成10进制的方法

    本文实例讲述了php实现将任意进制数转换成10进制的方法.分享给大家供大家参考.具体如下: php将任意进制的数转换成10进制,例如8进制转换成10进制,16进制转换成10进制 <?php # Show the steps involved in converting a number # from any base (like octal or hex) to base 10 # See below for examples, instructions and copyright functi

  • 在python中将字符串转为json对象并取值的方法

    如下所示: string =" { "status": "error", "messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."], "code": 404 }" print '对象:' string print '取值:' json.loads(string)['code']

  • PHP自定义多进制的方法

    如下所示: /** * 自定义多进制,根据设置的多进制字符串获取十进制对应的多进制 * @param $str 自定义的多进制字符串 * @param $num 十进制数字 * @return $xbin 对应的多进制数字 */ function xbin($str, $num){ $num = floatval($num); $x = strlen($str); $arr = str_split($str); $digit = fmod($num, $x); $xbin = isset($ar

  • Python实现字符串反转的常用方法分析【4种方法】

    本文实例讲述了Python实现字符串反转的常用方法.分享给大家供大家参考,具体如下: 下面是实现python字符串反转的四种方法: 1. 切片 def rev(s): return s[::-1] 这是采用切片的方法,设置步长为-1,也就是反过来排序. 这种方法是最简洁的,也是最推荐的. 2. 这种方法与切片类似,不过比较麻烦 def rev(s): str0 = '' l = len(s)-1 while l >= 0: str0 += s[l] l -= 1 return str0 这种方法

  • PHP实现的各种进制相互转换功能小工具示例

    本文实例讲述了PHP实现的各种进制相互转换功能小工具.分享给大家供大家参考,具体如下: <html> <head> <title>进制转换器</title> <?php $n1=$n2=""; if($_POST){ $n1=$_POST['n1']; $trans=$_POST['trans']; if($trans=='1'){ $n2=decbin((int)$n1); }elseif($trans=='2'){ $n2=de

  • Python如何读取16进制byte数据

    目录 如何读取16进制byte数据 Python的十六进制数 转换关系 hex() 函数 int() 函数 运算 如何读取16进制byte数据 小弟最近在做网络编程的时候,遇到了一些byte数据需要储存,但是不是常见的str字符对应的byte,类似于b'\x00\xff\xfe\x01'这样的数据,查找资料后发现这种东西是16进制编码的byte格式,可以直接转成str没有问题,但是再转回bytes就会出现莫名其妙的双斜杠,很是头疼. a = b'\x00\xef\xa2\xa0\xb3\x8b\

  • 2~62位任意进制转换方法(c++)

    进制转换的符号表为[0-9a-zA-Z],共61个字符,最大可表示62进制. 思路是原进制先转换为10进制,再转换到目标进制. 疑问: 对于负数,有小伙伴说可以直接将符号丢弃,按照整数进行进位转换,最后再将负号补回来,我认为这种做法是不对的. 正确的做法是:考虑好按照16位(short)还是32位(int)抑或64位(long long),先求出二进制补码(这时候就正负数就统一了),将二进制数转换为十进制后在转换为其他进制(如果有小伙伴知道如何直接将二进制转换为任意进制的方法可以留言告诉我,不胜

随机推荐