1. 程式人生 > >python3:數字/字串之間的轉換

python3:數字/字串之間的轉換

目錄

前言

前言

    專案中用到了pyDES模組和hashlib模組,計算出來的結果和預期的總是不一致,後來不斷的實驗發現是傳入資料型別不一致導致的,傳入hex型別和bytes型別計算出來的完全不一致。以此做個總結順便複習以下數字和字串之間的轉換。

進位制之間的轉換

bin( number ):接收的是數字,可以是二進位制數、八進位制數、十進位制數和十六進位制數,返回以0b開頭的二進位制字串表示

>>> bin(0b111)
'0b111'
>>> bin(0o111)#0o表示八進位制
'0b1001001'
>>> bin(0x111)
'0b100010001'
>>> bin(111)
'0b1101111'
>>> bin('111')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an integer
>>>

oct(number):內建函式,接收一個數字,可以是二進位制數、八進位制數、十進位制數和十六進位制數,返回以0o開頭的八進位制符串表示

>>> oct(0b111)
'0o7'
>>> oct(111)
'0o157'
>>> oct(0x111)
'0o421'
>>> oct(0o111)
'0o111'
>>> oct('111')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an integer
>>>

hex(number ):

 內建函式,接收一個數字,可以是二進位制數、八進位制數、十進位制數和十六進位制數,返回以0x開頭的十六進位制字串表示

>>> hex(0b111)
'0x7'
>>> hex(111)
'0x6f'
>>> hex(0o111)
'0x49'
>>> hex(0x111)
'0x111'
>>> hex('111')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an integer
>>>

int()

 是一個,建構函式如下:

 int(x=0) --> integer

 int(x, base=10) --> integer

函式作用:把一個數字或者字元轉換為一個整數

引數說明

如果沒有指定任何引數返回的是數字0;

如果輸入的是浮點數返回的只有整數部分,相當於向下取整;

如果給定了引數base那麼x必須是字串或bytes或bytearray instance ;

base有效的取值是0,或2-36,預設值是10,代表x是十進位制;base為0表示x按照字面意思進行解析

>>> int()
0
>>> int(12.98)	      #將浮點數向下取整
12
>>> int('0o10',base=0)  #0o代表八進位制,此語句等價於int('0o10',base=8)
8
>>> int('10',base=0)    #預設為十進位制,此語句等價於int('10',base=10)
10
>>> int('0b1010',base=0) #0b代表二進位制,等價於int('0b1010',base=2)
10
>>> int('0x10',base=0)  #0o代表十六進位制,等價於 int('0x10',base=16) 
16
>>> int('0b1010',base=2)  
10
>>> int(0x10,base=16)  #給定了引數base,x不是字元型別
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: int() can't convert non-string with explicit base
>>> int(0b10)    #直接將輸入的二進位制轉換為十進位制數
2
>>> int(0o10)   #直接將輸入的八進位制轉換為十進位制數
8
>>> int(0x10)   #直接將輸入的十六進位制轉換為十進位制數
16
>>> int(10)     #返回的資料和輸入的一致
10
>>> int('15',base=16)  #表示將16進位制的0x15轉換成10進位制數
21
>>> int('15',base=8)   #表示將8進位制的0o15轉換成10進位制數
13
>>> int('15',base=10)  #表示將10進位制的15轉換成10進位制數
15
>>> int('15',base=2)   #將2進位制的0x15轉換成10進位制數,二進位制只有0、1,所以會丟擲ValueError異常
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '15'

字串和數字之間的轉換

需要注意的時,待轉換的都是字串,只是裡面的值代表的是字元還是數字。將轉換函式封裝在模組中。

#encoding = utf-8
import re

def bin2str(text):
      '''將二進位制轉換為字串'''
      if not isinstance(text,str):
            raise TypeError('input is not a str type')
      binstr = text.replace(' ','')#去掉空格
      #8個字元為一組分組
      bin_list = re.findall(r'.{8}',binstr)
      #由於正則得到的是字串,所以將每組的值由由二進位制轉換為十進位制,再轉換為字元表示
      return ''.join(map(lambda x : chr(int(x,2)),bin_list))

def hex2str(text):
      '''十六進位制轉換為字串'''
      if not isinstance(text,str):
            raise TypeError('input is not a str type')
      hexstr = text.replace(' ','')
      #2個字元為一組分組
      hex_list = re.findall(r'.{2}',hexstr)
      #由於正則得到的是字串,所以將每組的值由16進位制轉換為十進位制,再轉換為字元表示
      return ''.join(map(lambda x : chr(int(x,16)),hex_list))

def ascii2str(text):
      '''將ascii碼轉換為字串'''
      if not isinstance(text,str):
            raise TypeError('input is not a str type')
      asciistr = text.replace(' ','')
      #2個字元為一組分組
      ascii_list = re.findall(r'.{2}',asciistr)
      #由於正則得到的是字串,所以將每組的值由16進位制轉換為十進位制,再轉換為字元表示
      return ''.join(map(lambda x : chr(int(x)),ascii_list))

def str2hex(text):
      '''將字串轉換為十六進位制數'''
      if not isinstance(text,(str,bytes)):
            raise TypeError('input is not a str type')
      if isinstance(text,str):
            data = text.encode('utf8')
      else:
            data = text[:]
      return ''.join(map(lambda x : hex(x)[2:],data))
def char2float(s):
      '''把字串'123.456'轉換成浮點數123.456'''
        from functools import reduce
        integer,decimal = s.split('.')
        num_list = list(map(lambda n: reduce(lambda x,y : int(x)*10+int(y),n),s.split('.')))
        return num_list[0] + num_list[-1]/pow(10,len(num_list))
      
if __name__ == "__main__":
      import binascii
      s = '00101111011001100011011000110111001100110011001000110100001100010011000001100001011000010110010001100011001100000011001100110111011001100110001000110000011000110110001001100001011000010011000000110000011000110011011100110101001100110011000100110011001101110011001100101110011101000111100001110100'
      print(bin2str(s))

      s = b'666C61677B65633862326565302D336165392D346332312D613031322D3038616135666137626536377D'.decode()
      print(hex2str(s))
      assert hex2str(s).encode() == binascii.a2b_hex(s) , 'assert error'

      s='4546454632453246464546324645464632464646324546464632464645454645324546464632464646324645464632'
      print(ascii2str(s))

      s = 'Please encrypt my data '.encode()
      assert str2hex(s).encode() == binascii.b2a_hex(s) , 'assert error'

單個字元和對應ascii轉換

chr(i):返回一個數字i對應的unicode字串,i的取值為 0 <= i <= 0x10ffff.

>>> chr(65)
'A'
>>> chr(3)
'\x03'
>>> chr(32)
' '
>>> chr(32999)
'朧'

ord():返回unicode字元對應的ascii碼值,返回的是數字

>>> ord('a')
97
>>> ord('8')
56
>>> ord('*')
42
>>> ord('中')
20013
>>> type(ord('a'))
<class 'int'>

相關推薦

python3數字/字串之間轉換

目錄 前言 前言     專案中用到了pyDES模組和hashlib模組,計算出來的結果和預期的總是不一致,後來不斷的實驗發現是傳入資料型別不一致導致的,傳入hex型別和bytes型別計算出來的完全不一致。以此做個總結順便複習以下數字和字串之間的轉換。 進

C#面試題數字字串格式轉換

例如輸入:123456789,輸出:”1,2345,6789“ 示例程式碼如下: using System.Text; string Format(string str){     StringBuilder sb=new StringBuilder();//使用

【Python學習筆記3】變數型別數字+字串+元組+列表

11.函式庫引用math,random,turtle。 需要:                  import 庫名 庫名.函式名(變數值) 或者需要:           from庫名import函式名,或者是:from庫名import* 函式名(變數值) 12.

Java日期和字串之間轉換,自己封裝日期與字串轉換

一:日期與字串轉換 public class DateFormatDemo { public static void main(String[] args) throws ParseException { //日期轉換成字串 Date d = new Date(); Simple

[Swift]庫函式atoi字串內容轉換為整數

1、如果第一個非空格字元存在,是數字或者正負號則開始做型別轉換,之後檢測到非數字(包括結束符 \0) 字元時停止轉換,返回Int32整形數。否則,返回0。 1 //返回Int32位整形 2 print(atoi("123456")) 3 //Print 123456 4 print(atoi("

C# 實現16進位制和字串之間轉換的程式碼

獲取字串中每個字元的十六進位制值。  獲取與十六進位制字串中的每個值對應的字元。  將十六進位制 string 轉換為整型。  將十六進位制 string 轉換為浮點型。  將位元組陣列轉換為十六進位制 string。 示例一:  輸出 string 中的每個字元的十六進位制值。 首先,它將 str

Gson在java物件和json字串之間轉換

GsonLib下載連結 Gson相比org.json最大的好處是從json字串轉向java例項時候少了依據每個例項自己賦值的過程,比如在org.json的時候,我們先從json字串構建一個jsonobject,然後用各種的json get方法獲取到每個欄位的值

Python: 在Unicode和普通字串之間轉換

1.1. 問題Problem You need to deal with data that doesn't fit inthe ASCII character set. 你需要處理不適合用ASCII字符集表示的資料. 1.2. 解決Solution Unicode

數字字串如何轉換為日期

1、如何如何將一個字串如“ 20110826134106”裝化為任意的日期時間格式,下面列舉兩種型別:   NSString* string = @"20110826134106";    NSDateFormatter *inputFormatter = [[[NSDat

基本資料型別的介紹及轉換,基本資料型別與字串之間轉換字串與字元陣列之間轉換以及字串與位元組陣列之間轉換

目錄 一.Java的基本資料型別介紹 二.各類基本資料之間的轉換 三.基本資料型別和String之間轉換(附:物件包裝類及所對應的基本資料型別) 四.String與字元陣列轉換 五.Strin

java新手字串陣列、字元陣列和字串之間轉換

(1)字串和字元陣列的轉化 // 字串轉化成字元陣列 String str = "abcdefg"; char[] ch = str.toCharArray(); //輸出a System.out.println(ch[0]); //字元陣列

C語言 BCD碼(時間)和字串之間的相互轉換

程式碼如下: #include <stdio.h> #include <stdlib.h> typedef unsigned char BYTE; typedef unsigned int DWORD; typedef unsigned short WORD;

C++中數字字串之間轉換(包括C++11新標準和寬窄字元轉換)

1、字串數字之間的轉換 (1)string --> char *    string str("OK");    char * p = str.c_str(); (2)char * -->string    char *p = "OK";    string str(p); (3)char *

Qt數字字串之間的相互轉換

把QString轉換為 double型別 方法1.QString str="123.45"; double val=str.toDouble(); //val=123.45 方法2.很適合科學計數法形式轉換 bool ok; double d; d=QString("123

Python3小程式字串轉換成連續的UTF8編碼(16位)

# coding: utf-8 import binascii ''' 參考程式碼1 mystery = b"\xe5\x88\xab" x = mystery.decode('utf-8') print(x) y = bytearray.fromhex(\xe5\x88

ip地址在數字字串之間的相互轉換

       #include <sys/socket.h>        #include <netinet/in.h>        #include <arpa/inet.h>        int inet_aton(co

python數字轉換成中文/數字轉換成漢字python字串方法最優

這幾天做一個小程式的時候有了這樣的需求:把阿拉伯數字轉換成漢字,比如把‘101’轉換成‘一百零一’,把‘10000’轉換成‘一萬’。 做這樣的程式的時候有以下幾個技術難點: 1.加單位問題:比如需要加入‘十‘’百‘’千‘’萬’ 2.去掉多餘的‘零’的問題:因

C++中數字字串之間轉換

字串數字之間的轉換 (1)string --> char * string str("OK"); char * p = str.c_str(); (2)char * -->string char *p = "OK";

js中常用資料型別之間轉換--字串轉換數字;----字串和json;---字串和陣列

字串轉數字 parseInt("1234blue");   //returns   1234 parseInt("0xA");   //returns   10parseInt("22.5");   //returns   22parseInt("blue");   //r

JS陣列中元素數字字串之間轉換

js字串轉換成數字 將字串轉換成數字,得用到parseInt函式。 parseInt(string) : 函式從string的開始解析,返回一個整數。 舉例:parseInt('123') : 返回 123(int); parseInt('1234xxx') : 返回 12