我有一个Python3函数,它结合了两个bytes,一个使用bytes.fromhex()方法,另一个使用字节()方法:
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中可以编写与上面相同的函数吗?(如果可以,如何控制byteorder和signed参数?)
至于byteorder,假设在Python中将number 1024转换为bytes:
(1024).to_bytes(2, byteorder='little') # Output: b'\x00\x04', byte 00 is before byte 04相比之下,在Raku中将number 1024转换为Buf或Blob:
buf16.new(1024) # Output: Buf[uint16]:0x<0400>, byte 00 is after byte 04在Raku中有任何方法可以在上面的示例中获得Buf[uint16]:0x<0004>吗?
更新
在codesections,的启发下,我试图找出一个类似于codesections's答案的解决方案:
sub bytes_add() {
my $bytes_a = pack("H*", '6812');
my $bytes_b = buf16.new(DateTime.now.month);
$bytes_a ~ $bytes_b;
}但仍然不知道如何使用byteorder。
发布于 2021-09-07 14:58:24
在Raku中可以编写与上面相同的函数吗?
是。我不能百分之百肯定我理解你提供的函数的总体目标,但是直译/逐行翻译当然是可能的。如果你想详细说明这个目标,也有可能以一种更简单/更地道的方式实现同样的目标。
下面是逐行翻译:
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列表来使用相反的顺序。
https://stackoverflow.com/questions/69086801
复制相似问题