我需要将uint
拆分为list of bits
(list of chars
,其中每个字符"0"
或"1"
,也是好的)。我尝试这样做的方法是首先将uint
连接到string
,使用数字类型的二进制表示形式 - bin()
,然后使用str_split_all()
将其拆分:< / p>
var num : uint(bits:4) = 0xF; // Can be any number
print str_split_all(bin(num), "/w");
("/w"
是字符串匹配模式,表示任何字符)。
输出I 期望:
"0"
"b"
"1"
"1"
"1"
"1"
但实际输出是:
0. "0b1111"
为什么它不起作用?谢谢你的帮助。
答案 0 :(得分:3)
如果要将整数拆分为位列表,可以使用%{...}
运算符:
var num_bits : list of bit = %{num};
您可以在EDAPlayground找到一个有效的例子。
作为对您的问题的额外说明,"/w"
并不意味着匹配任何字符。字符串"/\w/"
表示匹配AWK语法中的任何单个字符。如果你把它放到你的匹配表达式中,你将得到(几乎)你想要的输出,但是有一些额外的空格交错(分隔符)。
无论如何,如果你想将一个字符串拆分成它的组成字符,str_split_all(...)
就不是了。将字符串转换为ASCII字符然后再将它们转换回字符串更容易:
extend sys {
run() is also {
var num : uint(bits:4) = 0xF; // Can be any number
var num_bin : string = bin(num);
var num_bin_chars := num_bin.as_a(list of byte);
for each (char) in num_bin_chars {
var char_as_string : string;
unpack(packing.low, %{8'b0, char}, char_as_string);
print char_as_string;
};
};
};
unpack(...)
语法直接来自 e 参考手册,第2.8.3节字符串和标量之间的类型转换或标量列表