首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`bytes.fromhex`和`to_bytes`方法在Raku?

`bytes.fromhex`和`to_bytes`方法在Raku?
EN

Stack Overflow用户
提问于 2021-09-07 10:46:02
回答 1查看 199关注 0票数 7

我有一个Python3函数,它结合了两个bytes,一个使用bytes.fromhex()方法,另一个使用字节()方法:

代码语言:javascript
复制
from datatime import datetime

def bytes_add() -> bytes:
  bytes_a = bytes.fromhex('6812')
  bytes_b = datetime.now().month.to_bytes(1, byteorder='little', signed=False)
  return bytes_a + bytes_b

在Raku中可以编写与上面相同的函数吗?(如果可以,如何控制byteordersigned参数?)

至于byteorder,假设在Python中将number 1024转换为bytes

代码语言:javascript
复制
(1024).to_bytes(2, byteorder='little') # Output: b'\x00\x04', byte 00 is before byte 04

相比之下,在Raku中将number 1024转换为BufBlob

代码语言:javascript
复制
buf16.new(1024) # Output: Buf[uint16]:0x<0400>, byte 00 is after byte 04

在Raku中有任何方法可以在上面的示例中获得Buf[uint16]:0x<0004>吗?

更新

codesections,的启发下,我试图找出一个类似于codesections's答案的解决方案:

代码语言:javascript
复制
sub bytes_add() {
    my $bytes_a = pack("H*", '6812');
    my $bytes_b = buf16.new(DateTime.now.month);
    $bytes_a ~ $bytes_b;
}

但仍然不知道如何使用byteorder

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 14:58:24

在Raku中可以编写与上面相同的函数吗?

是。我不能百分之百肯定我理解你提供的函数的总体目标,但是直译/逐行翻译当然是可能的。如果你想详细说明这个目标,也有可能以一种更简单/更地道的方式实现同样的目标。

下面是逐行翻译:

代码语言:javascript
复制
sub bytes-add(--> Blob) {
    my $bytes-a = Blob(<68 12>);
    my $bytes-b = Blob(DateTime.now.month);
    Blob(|$bytes-a, |$bytes-b)
}

默认情况下,bytes-add的输出使用其十六进制表示形式(Blob:0x<44 0C 09>)打印。如果您想打印它更像Python打印它的字节文字,您可以使用bytes-add».chr.raku,它打印为("D", "\x[C]", "\t")

如果是,如何控制byteorder

因为上面的代码从一个Blob构造List,所以您可以简单地.reverse列表来使用相反的顺序。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69086801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档