需求倒是很简单,给一个Hex 格式的string, 对其进行 base32(crockford) 编码,求编码结果。下面是代码,期望结果是 "2HH0GC3SRC6PAYX9Z6WVGKCEK0TEF9QC8K7J8F312QSZYEYP64MN8Y9SXR", 实际得到 "MC8430YE31NJQQAFSQ6W4V3MR6KKTDV24SWJ3RR8NYFZKQNHH55A7JEFE"。
import base32_crockford
from base64 import b16decode
buffer_hex = "1462083079c30d657ba9f9b9b84d8e9834e7a6ec44cf243c6115f3ff3bd63129547939ee"
b = b16decode(buffer_hex.upper())
n = int.from_bytes(b, byteorder="big", signed=False)
result = base32_crockford.encode(n)
print(result) # output: MC8430YE31NJQQAFSQ6W4V3MR6KKTDV24SWJ3RR8NYFZKQNHH55A7JEFE, 与预期不符
因为换了其他语言比如nodejs, 很容易就拿到了期望的结果
package.json:
"base32-decode": "1.0.0",
"base32-encode": "1",
完整代码:
const base32Encode = require('base32-encode')
const buffer_hex = '1462083079c30d657ba9f9b9b84d8e9834e7a6ec44cf243c6115f3ff3bd63129547939ee'
const buf = Buffer.from(buffer_hex, 'hex')
const u8 = new Uint8Array(buf)
const result = base32Encode(u8, 'Crockford')
// output: 2HH0GC3SRC6PAYX9Z6WVGKCEK0TEF9QC8K7J8F312QSZYEYP64MN8Y9SXR, 这是期望的结果
console.log(result)
可以对标这个在线网站的结果
https://cryptii.com/pipes/hex-to-base32
我尝试过修改python 脚本中的 int.from_bytes
的参数,比如字节顺序改成 "little"小端序, singed=True,依然得不到期望结果。
从 n = int.from_bytes(b, byteorder="big", signed=False)
这步开始就不对了,node.js 的实现是 bytes 5 位一组转换并拼接的,而不是直接把一个大数整体转换。
重新写了一个,没有第三方依赖:
from base64 import b16decode
def crockford_b32encode(data: bytes) -> str:
# 定义 crockford 字符集
symbols = '0123456789ABCDEFGHJKMNPQRSTVWXYZ'
# bytes 转二进制字符串
bitstr = ''.join(f'{byte:08b}' for byte in data)
# 填充为 5 的倍数
padlen = (5 - (len(bitstr) % 5)) % 5
bitstr += '0' * padlen
# 编码
encstr = ''.join([symbols[int(bitstr[i:i+5], 2)] for i in range(0, len(bitstr), 5)])
return encstr
buffer_hex = "1462083079c30d657ba9f9b9b84d8e9834e7a6ec44cf243c6115f3ff3bd63129547939ee"
b = b16decode(buffer_hex.upper())
result = crockford_b32encode(b)
print(result)
本文向大家介绍总结JavaScript的正则与其他语言的不同之处,包括了总结JavaScript的正则与其他语言的不同之处的使用技巧和注意事项,需要的朋友参考一下 前言 最近发现JavaScript中的正则在某些地方的表现和其他语言或工具中的正则有些不同,比较另类.虽然你几乎不可能写出也几乎用不到下面我讲的这些正则,但是了解一下毕竟是好的. 本文中的代码示例都是在兼容ES5的JavaScript环
本文向大家介绍介绍下python与其他语言的区别?相关面试题,主要包含被问及介绍下python与其他语言的区别?时的应答技巧和注意事项,需要的朋友参考一下 python是动态类型,这意味着不需要在声明变量时指定类型 python是面向对象的,有类的概念 python写起来是很快,但跑起来会比较慢,不过可以用c拓展写,numpy就是一个很好的例子 使用场景多,web 大数据 人工智能 数据科学 能简
Nacos社区当前仅提供了Java版本的客户端,我们将主要依靠社区的贡献来发展多语言客户端。在未来,我们将向Nacos社区用户推荐那些最被广泛使用的以及支持最好的客户端作为Nacos相应语言的官方版本。 go cpp python nodejs more ...
当使用缺乏原生Pact支持的语言来写服务提供者时,你仍然可以使用通用的Pact提供者端验证工具来验证是否满足契约。 通用Pact提供者验证 下面的设置简化了任何语言的Pact提供者端的验证过程。 特性: 验证发布到Pact Broker的Pact文件 在开发环境验证供测试用的本地Pact*.json文件 安装有Ruby环境以及sane的预先配置的Docker镜像,缺省为src / Rakefile
JRuby Read more here: https://github.com/iconara/mikka. Groovy/Groovy++ Read more here: https://gist.github.com/620439. Clojure Read more here: http://blog.darevay.com/2011/06/clojure-and-akka-a-match
问题内容: 什么语言用于构建c ++和java等底层语言? 您怎么能没有语言地建立第一语言? 问题答案: 在编译器的上下文中,此操作通常称为bootstrapping。特别是,请参阅“鸡肉和鸡蛋问题”部分,以直接找到您的问题。 非常 第一 编译器会一直手用汇编语言编写。如果您的下一个问题是“第一个汇编程序是怎么写的?” 那么答案是,第一个汇编器是用二进制机器代码手写的,并且可能带有前面板拨动开关。
我已经和flutter一起工作了几个月了,似乎在一个应用程序中没有太多关于后端或高级功能的工作。我喜欢使用Flutter来帮助我设计UI,但我想使用另一种语言来帮助我做一些其他的事情。例如,我想要显示一个全屏的相机页面(几乎像Snapchat一样),或者像通过App直接向另一个用户发送一条消息。我需要别的语言来做这样的事情吗?我不是高级程序员。我只想创建能够处理和存储一点点东西的简单应用程序。
高级语言有数百种,但被广泛采用的只有少数几种。(COmmon Business Oriented Language)是1954到]957年之间由IBM公司开发的,在需要复杂数学计算的科学和工程项目中应用较多。FORTRAN仍然在工程领域广为使用。 COBOL(COmmon Business Oriented Language)是1959年由计算机制造商、政府和工业企业计算机用户开发的。COBOL擅