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