相关疑难解决方法(0)

在Python 3中将int转换为字节

我试图在Python 3中构建这个字节对象:

b'3\r\n'

所以我尝试了显而易见的(对我来说),并发现了一个奇怪的行为:

>>> bytes(3) + b'\r\n'
b'\x00\x00\x00\r\n'
Run Code Online (Sandbox Code Playgroud)

显然:

>>> bytes(10)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)

我一直无法看到任何关于为什么字节转换以这种方式阅读文档的指针.但是,我确实在Python问题中发现了一些关于添加format字节的惊喜消息(另请参阅Python 3字节格式化):

http://bugs.python.org/issue3982

这与奇怪的事情(如字节(int)现在返回零)的交互更加糟糕

和:

如果bytes(int)返回该int的ASCIIfication,对我来说会更方便; 但老实说,即使错误也会比这种行为更好.(如果我想要这种行为 - 我从来没有 - 我宁愿它是一个类方法,调用类似"bytes.zeroes(n)".)

有人可以解释一下这种行为来自哪里?

python python-3.x

147
推荐指数
9
解决办法
28万
查看次数

有没有更快的方法将任意大整数转换为大端字节序列?

我有这个Python代码来做到这一点:

from struct import pack as _pack

def packl(lnum, pad = 1):
    if lnum < 0:
        raise RangeError("Cannot use packl to convert a negative integer "
                         "to a string.")
    count = 0
    l = []
    while lnum > 0:
        l.append(lnum & 0xffffffffffffffffL)
        count += 1
        lnum >>= 64
    if count <= 0:
        return '\0' * pad
    elif pad >= 8:
        lens = 8 * count % pad
        pad = ((lens != 0) and (pad - lens)) or 0
        l.append('>' + …
Run Code Online (Sandbox Code Playgroud)

python optimization

8
推荐指数
2
解决办法
5642
查看次数

如何将表示UTF-8字符的int转换为Unicode代码点?

让我们使用字符Latin Capital Letter a和Ogonek(U + 0104)作为例子.

我有一个代表其UTF-8编码形式的int:

my_int = 0xC484
# Decimal: `50308`
# Binary: `0b1100010010000100`
Run Code Online (Sandbox Code Playgroud)

如果使用unichr我得到的功能:\uC484?(U + C484)

但是,我需要输出: ?

如何转换my_int为Unicode代码点?

python unicode int utf-8 python-2.7

8
推荐指数
1
解决办法
4751
查看次数

在 Python 中将字符串从 big-endian 转换为 little-endian,反之亦然

我有一个带有十六进制字符的长字符串。
例如:

string = "AA55CC3301AA55CC330F234567"
Run Code Online (Sandbox Code Playgroud)

我正在使用

string.to_bytes(4, 'little')
Run Code Online (Sandbox Code Playgroud)

我希望最终的字符串如下:

6745230F33CC55AA0133CC55AA
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误

AttributeError: 'str' object has no attribute 'to_bytes'

这里有什么问题?

python python-3.x

6
推荐指数
2
解决办法
2万
查看次数

从覆盆子pi上的ADC芯片读取原始音频值

我将MCP3008 ADC芯片连接到驻极体麦克风和我的pi.我在python中使用bit-banging读取输入,我得到一个0-1024的整数.

我按照本教程进行了比特操作:https://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi/connecting-the-cobbler -to-A-mcp3008

我的问题是如何取这个整数并将其转换为有意义的东西?我可以以某种方式将这些字节写入python中的文件,以获取Audacity可以播放的原始音频数据吗?现在,当我尝试写入值时,它们只显示为整数而不是二进制.我是python的新手,我发现这个链接用于转换原始数据,但是我在生成原始数据时遇到了麻烦:Python打开原始音频数据文件

我甚至不确定这些值代表什么,他们是PCM数据,我必须做与时间有关的数学?

python audio adc raspberry-pi

5
推荐指数
1
解决办法
2543
查看次数

Python 中从 PrivateKey/CertificateRequest/Certificate 中提取公钥模数,格式与 OpenSSL 相同

使用 OpenSSL,我可以使用以下命令从各种对象中提取公钥的模数:

openssl rsa -noout -modulus -in {KEY}
openssl req -noout -modulus -in {CSR}
openssl x509 -noout -modulus -in {CERT}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用cryptographypyopenssl包在 python 中复制它。

我可以从 Python 中的所有这些对象中提取公钥,但我无法弄清楚如何对模数进行编码以匹配 OpenSSL 命令行输出——这似乎是我无法理解的格式的 base64 编码版本来自这 3 个项目中任何一个的文档或源代码。

python openssl pycrypto

5
推荐指数
1
解决办法
2367
查看次数

Python:将字节转换为二进制并移动其位?

我想为学校项目将 Python 中的一种编码转换为另一种编码。但是,我正在翻译的编码将在第一位的编码中添加填充。

如何将二进制数字序列向左移动一位,以便它来自:

00000001 11001100 01010101 等等

00000011 10011000 10101010 等等

那么最终结果的最低位将是前者的最高位数?

python binary

4
推荐指数
1
解决办法
1万
查看次数