在SV中,string类型用来表示可变长度的字符串
字符串类型变量的存储单位为byte类型(8-bit,一个字节),它的内存是动态分配的,因而无需担心它的内存空间管理分配问题。
不同于C函数,SV中的字符串结尾没有“空字符”即null字符“\0”。
一、字符串常见的使用方式
***字符串常见使用方式***
typedef logic [15:0] r_t;
// 此处的logic未声明类型,即默认为变量类型,然后将其自定义为r_t,r_t是个变量类型而不是变量
r_t r; //r是变量类型r_t声明的一个变量
integer i = 2;
string b = ""; //等同于 string b;
string a = {"Hi", b}; //把两个字符串拼接到一起
r = r_t'(a);
//显式转换。把a这个字符串类型用r_t这个变量类型转换成变量类型,然后赋值给变量r。
b = string'(r);
//显式转换。把r这个变量类型用string这个字符串类型转换成字符串类型,然后赋值给变量b。
b = "Hi"; //赋值
b = {5{"Hi"}}; //5个"Hi"
a = {i{"Hi"}}; //将i=2带入,2个“Hi”
a = {i{b}}; //此处的b不清楚是5个Hi还是1个Hi
a = {a, b}; //拼接
a = {"Hi", "+", b}; //拼接三个字符串到一起
b = {"H", ""}; //拼接
a[0] = "h"; //赋值
a[0] = "cough";
//即便把字符串“cough”赋值给a[0],但最终a[0]的值还是h,前面的coug就被截取掉了。a[0]只有一个字节8bit的大小,而一个字母h的大小就是一个字节,刚刚好。
二、字符串的内建方法
1、str.len(): 返回字符串的长度
2、str.putc(i, c): 将字符串里的第i个字符替换成字符c,等同于str[i] = c
3、str.getc(i): 返回第i个字符
4、str.substr(i, j): 将从第i个字符到第j个字符的字符串返回
5、str.atoi(), .atohex(), .atooct(), .atobin(): 将字符串看成十进制、十六进制、八进制、二进制,然后转换成十进制整型
str = "12345";
int i = str.atoi(); //将字符串“12345”看成是十进制,然后转换成十进制整型12345,最后赋值给i
此处的字符串是“12345”,是十进制的格式,所以选择str.atoi();如果字符串是“1100”二进制格式,那么就选择用str.atobin()。
string value = “1001”
value.atoi() = 1001 //将字符串“1001”看成是十进制,然后转换成十进制整型
value.atobin() = 1001 //将字符串“1001”看成是二进制,然后转换成十进制整型
内建方法.size()通常是给数组array使用的,如array.size()