Python3 字符串、数字、二进制互相转换


数字
    整数 -1 0 1
    浮点 -0.1 0.0 1.0
    二进制 0b11        结果 3
    八进制 0o77        结果 63
    16进制 0xFF        结果 255

字符串 <class 'str'>
    纯字符串 'str' "str" '''str''' """str"""
    字符串数字(二进制 0b) '0b0'     转成字符 str(0b10) 结果 '2'     ## 可以前置补零str(0b00000010)
    字符串数字(八进制 0o) '0o0'     转换字符 str(0o77) 结果 '63'    ## 可以前置补零str(0o0077)
    字符串数字(十进制)    '0'       转换字符 str(100)  结果 '100'   ## 不能前置补零
    字符串数字(16进制 0x) '0x0'     转换字符 str(0xFF) 结果 '255'   ## 可以前置补零str(0x00FF)

二进制 <class 'bytes'>
    二进制字节表示 b''    # ASCII 字符 0-9 a-z A-Z 等


================================================================================================================================
## 数字 转 字符串 ##  255(10进制)  0b11(2进制)  0xFF(16进制)

## (10进制数)
>>> bin(255)            '0b11111111'
>>> oct(255)            '0o377'
>>> hex(255)            '0xff'

## (2进制数)
>>> bin(0b11)           '0b11'
>>> hex(0xFF)           '0xff'

## (16进制数)
>>> bin(0xFF)           '0b11111111'
>>> hex(0xFF)           '0xff'

================================================================================================================================
## 字符串 转 数字(十进制数)##  '123'(以10进制解析)  '10'(以2进制解析)  'a'(以16进制解析)

## (10进制表示的字符串)
>>> int('123')          123         ## 十进制字符转十进制数字
>>> int('123',10)       123         ## 默认是十进制

## (二进制表示的字符串)
>>> int('100',2)        4           ## 二进制的 100 等于 十进制的 4(可以不加前置 0b)
>>> int('0b100',2)      4           ## 二进制的 100 等于 十进制的 4
>>> int('0b0100',2)     4           ## 可以前置补零

## (16进制表示的字符串)
>>> int('a',16)         10          ## 16进制的 a 等于 十进制的 10(可以不加前置 0x)
>>> int('0xa',16)       10          ## 16进制的 a 等于 十进制的 10
>>> int('0x0a',16)      10          ## 16进制的 a 等于 十进制的 10(可以前置补零)
>>> int('10',16)        16          ## 16进制的10 等于 十进制的 16(可以不加前置 0x)
>>> int('0x10',16)      16          ## 16进制的10 等于 十进制的 16
>>> int('0x0010',16)    16          ## 16进制的10 等于 十进制的 16(可以前置补零)

================================================================================================================================
## 数字 转 数字 ##  0b11  0xFF

## 十进制 转 十进制
>>> int(255)            255         # 无意义操作
>>> 255                 255         # 无意义操作

## 二进制 转 十进制
>>> int(0b11)           3           # 可加前置零 int(0b0011)
>>> 0b11111111          255         # 等价

## 16进制 转 十进制
>>> int(0xFF)           255
>>> 0xff                255         # 等价 且 忽略大小写
>>> 0xFF                255         # 等价 且 忽略大小写

## 十进制 转 二进制(使用 数字 转 字节码/字符)
255 等价 0b11111111

## 十进制 转 16进制(使用 数字 转 字节码/字符)
255 等价 0xff


================================================================================================================================
## 字符串 转 字节码 ##

>>> bytes('abc','utf-8')              b'abc'
>>> bytes('编程','utf-8')             b'\xe7\xbc\x96\xe7\xa8\x8b'
>>> bytes('Python3编程','utf-8')      b'Python3\xe7\xbc\x96\xe7\xa8\x8b'

>>> 'Python3编程'.encode('UTF-8')     b'Python3\xe7\xbc\x96\xe7\xa8\x8b'

>>> S = 'Python3编程'                 'Python3编程'
>>> B = bytes(S,'utf-8')              b'Python3\xe7\xbc\x96\xe7\xa8\x8b'
>>> FMT = str(len(B)) + 's'           '13s'
>>> struct.pack(FMT,B)                b'Python3\xe7\xbc\x96\xe7\xa8\x8b'

## 以16进制数字写的字符串,直接转成一样的字节码(2个16进制字符才是一个字节)
>>> bytes.fromhex('01')               b'\x01'                       # 单字节
>>> bytes.fromhex('0001')             b'\x00\x01'                   # 双字节
>>> bytes.fromhex('aabbccddeeff')     b'\xaa\xbb\xcc\xdd\xee\xff'   # 多字节

================================================================================================================================
## 字节码 转 字符串 ##  取出16进制表示的内容

>>> b'abc'.decode('UTF-8')                                  'abc'
>>> b'Python3\xe7\xbc\x96\xe7\xa8\x8b'.decode('UTF-8')      'Python3编程'

>>> b'\xaa\xbb\xcc\xdd\xee\xff'.hex()                       'aabbccddeeff'
>>> b'0'.hex()                                              '30'    ## 字符0在ASCII码上的数字(数字是16进制表示)== 48(十进制)
>>> b'1'.hex()                                              '31'
>>> b'z'.hex()                                              '7a'

================================================================================================================================
## 数字 转 字节码(是二进制,用16进制显示) ##

# 10进制数 转 字节码
import struct
>>> struct.pack('B',0)          b'\x00'
>>> struct.pack('B',1)          b'\x01'
>>> struct.pack('B',101)        b'e'                    ## 101 对应 16进制的 0x65(此处返回值是显示为当前整数 101 对应的 ASCII字符 e)
>>> struct.pack('B',255)        b'\xff'                 # 无符号最大单字符可以表示的数字
>>> struct.pack('>i',255)       b'\x00\x00\x00\xff'     # 4字节大端表示的数字
>>> struct.pack('<i',255)       b'\xff\x00\x00\x00'     # 4字节小端表示的数字

# 2进制数 转 字节码
import struct
>>> struct.pack('B',0b11111111)     b'\xff'
>>> struct.pack('>i',0b111)         b'\x00\x00\x00\x07'     # 0b111 等于 7(10进制)
>>> struct.pack('>i',0b1111)        b'\x00\x00\x00\x0f'     # 0b1111 等于 15(10进制)
>>> struct.pack('>i',0b11111)       b'\x00\x00\x00\x1f'     # 0b11111 等于 31(10进制)

# 16进制数 转 字节码
import struct
>>> struct.pack('B',0xff)           b'\xff'
>>> struct.pack('>i',0xfff)         b'\x00\x00\x0f\xff'

================================================================================================================================
## 字节码 转 数字 ##

import struct          16进制表现                10进制等值
>>> struct.unpack('B', b'\xff')                      (255,)          # 单字节
>>> struct.unpack('>i', b'\x00\x00\x00\xff')         (255,)          # 4字节,大端模式
>>> struct.unpack('<i', b'\x00\x00\x00\xff')         (-16777216,)    # 4字节,小端模式

## 手动 转换
字节码 -> 字符串
>>> B = b'\xe9'
>>> S = B.hex()
>>> S                                               # 值 'e9'
字符串(16进制格式)-> 数字(10进制)
>>> int(S,16)                                       # 值 233

================================================================================================================================

################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################
################################################################################################################################

## ASCII 字符 和 数字
字节    b'\x05'
字符串   '\x05'

## 将一个整数 (0-1114111) 转换为 一个字符(整数对应的 ASCII 字符)
## ValueError: chr() arg not in range(0x110000)
>>> chr(0)                  '\x00'
>>> chr(1)                  '\x01'
>>> chr(97)                 'a'
>>> chr(1114111)            '\U0010ffff'
>>> len(chr(101))           1  # 长度为 1个字符
>>> len(chr(1114111))       1  # 长度为 1个字符

## 将一个 ASCII字符 转换为 一个整数
>>> ord('\x00')             0
>>> ord('\x01')             1
>>> ord('a')                97
>>> ord('0')                48
>>> ord('1')                49
>>> ord('A')                65
>>> ord('Z')                90
>>> ord('\U0010ffff')       1114111

################################################################################################################################
################################################################################################################################

## ASCII 字符 和 bin(字节)

from binascii import b2a_hex, a2b_hex
>>> a2b_hex('ab')
b'\xab'

>>> b2a_hex(b'ab')
b'6162'
>>> a2b_hex(b'6162')
b'ab'

 

<think>好的,用户问的是如何在编程中将数字类型转换字符串类型。我需要根据提供的引用资料来整理答案。首先,看看引用里的内容: 引用1提到显式类型转换,比如用toString()方法,还有String()函数。引用2举了个例子,把字符串数字转换为数值。引用3是关于C#中十六进制字符串数字转换的,可能相关但可能不是用户主要问的。引用4讲的是Python中不能用join直接转换字符串列表,需要先转字符串。引用5展示了R语言中的转换方法,如as.character()和as.double()。 用户的问题比较广泛,可能涉及多种语言,所以需要分语言回答。常见的有JavaScript、Python、Java、C#、R等。需要确保每种语言都有例子,并符合引用中的内容。例如,在Python中,用str()或者格式化字符串;JavaScript用toString()或String();R用as.character()等。同时,需要注意隐式和显式转换的区别,比如JavaScript中数字字符串拼接会自动转换,但显式转换更安全。 还需要注意用户可能遇到的问题,比如Python中列表转换需要元素都是字符串,如引用4提到的错误,这时候可能需要先遍历转换每个元素。此外,要确保每个例子中的语法正确,比如JavaScript中的变量声明,Python中的方法调用等。最后,生成相关问题,比如性能优化、常见错误等,参考用户提供的示例结构。 总结步骤: 1. 分编程语言讲解转换方法,每种语言给出例子。 2. 引用对应的参考资料来支持例子。 3. 提示隐式和显式转换的区别。 4. 注意事项或常见错误。 5. 生成相关问题。</think>在编程中将数字类型转换字符串类型的方法因语言而异,以下是常见编程语言的实现方式及注意事项: ### 一、JavaScript 1. **显式转换** - 使用`toString()`方法: ```javascript let num = 123; let str = num.toString(); // "123" ``` - 通过`String()`函数: ```javascript let str = String(456); // "456" ``` 2. **隐式转换** 通过字符串拼接自动触发类型转换: ```javascript let str = 789 + ""; // "789" ``` 注意:隐式转换可能导致意外结果,建议优先使用显式转换[^1]。 --- ### 二、Python 1. **直接转换** 使用`str()`函数: ```python num = 3.14 str_num = str(num) # "3.14" ``` 2. **格式化字符串** 使用f-string或format方法: ```python str_num = f"{42}" # "42" str_num = "{}".format(42) # "42" ``` 3. **列表转换注意** 若需将数字列表转为字符串列表,需遍历转换每个元素: ```python nums = [1, 2, 3] strs = [str(x) for x in nums] # ["1", "2", "3"] ``` 直接使用`join`会触发`TypeError`[^4]。 --- ### 三、Java 1. **基本类型转换** - 使用`String.valueOf()`: ```java String str = String.valueOf(123); // "123" ``` - 通过空字符串拼接: ```java String str = 456 + ""; // "456" ``` 2. **对象类型转换** 调用包装类的`toString()`方法: ```java Integer num = 789; String str = num.toString(); // "789" ``` --- ### 四、C# 1. **数值转字符串** - 使用`ToString()`方法: ```csharp int num = 255; string hexStr = num.ToString("X"); // "FF"(十六进制) ``` - 自定义格式: ```csharp double pi = 3.1415; string piStr = pi.ToString("0.00"); // "3.14" ``` 支持多种数字格式转换[^3]。 --- ### 五、R语言 1. **显式类型转换** 使用`as.character()`函数: ```r a <- 123.4 str_a <- as.character(a) # "123.4" ``` 反向转换则用`as.double()`或`as.numeric()`[^5]。 --- ### 注意事项 - **精度丢失**:浮点数转换时可能因精度问题导致字符串不一致。 - **语言特性**:部分语言(如JavaScript)会为`null`/`undefined`生成特定字符串(如`"null"`)。 - **性能优化**:频繁转换时建议使用语言内置方法(如Python的`str()`优于多次拼接)。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值