精华内容
下载资源
问答
  • Verilog常数赋值、字符串、标识符

    千次阅读 2019-11-08 20:40:48
    1.整数赋值 按照Verilog 2005的标准:0-9、a-f、z、x称作数字位(digit);...其在Verilog中的表示’b’、‘o’、‘d’、'h’称作基格式(base format)字符; 表示常数的bit数称作size。Verilog使用到的字...

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://bestfpga.blog.csdn.net/article/details/102604599
    ————————————————
    版权声明:本文为CSDN博主「FPGADesigner」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://bestfpga.blog.csdn.net/article/details/102604599
    1.整数赋值

    按照Verilog 2005的标准:0-9、a-f、z、x称作数字位(digit)
    表示数字正负的’+‘和’-‘视作一元操作符(unary operator)
    常说的二进制、八进制、十进制、十六进制称作数字的基(base)
    其在Verilog中的表示’b’、‘o’、‘d’、'h’称作基格式(base format)字符;
    表示常数的bit数称作
    size
    。Verilog使用到的字符都是不区分大小写的。

    另外要明白二进制数本身的运算规则与一个数是signed还是unsigned、小数点在哪个位置没有任何关系,这些只是设计者人为的规定。但是在代码设计时,要标识清楚数据是signed或unsigned,目的有两个:(1).对设计者的提示;(2).一些操作符、IP核的数据端口,对数据是signed或unsigned的“身份”有要求。

    如果一个数是负数(前面加了’-’),那么它必定采用的是二进制补码形式。

    方式1

    常数赋值有两种,一种为直接赋值(符号+一串数字位),采用这种方式赋值时,默认数据是sigend形式。如下面一个简单的示例:

    在这里插入代码片
    module test
    (
        input clk,
        output reg [31:0] c
    );
    
    wire [31:0] a, b;
    
    assign a = -595;
    assign b = -10;
    
    always @ (posedge clk)
        c <= a + b;
    
    endmodule 
    

    对两个带符号数做加法运算,结果仍然是带符号数,Vivado中仿真时,将Radix设置为Signed Decimal,可以看到变量C的结果为-605。

    方式2

    另一种则是常见的基常数赋值方法(符号+size+单引号+基格式字符+一串数字位),如"assign a = +16’d53;", 符号和size是可有可无的。

    如果在基格式字符(b、o、d、h)前加上’s’,表示这是个带符号数signed;没有加’s’则表示是不带符号数unsigend。如果前面加了符号位“-”,会自动用二进制补码的形式。

    如下面的简单示例:

    在这里插入代码片`timescale 1ns / 1ps
    
    module test
    (
        input clk,
        output reg [31:0] c
    );
    
    wire [31:0] a, b;
    
    assign a = -32'd595;   // 加上size,省去s
    assign b = -'sd10;      // 省略size,加上s
    
    always @ (posedge clk)
        c <= a + b;
    
    endmodule 
    

    仿真结果与第一个示例相同。

    位宽扩展

    这里先不讨论将低位宽的数据赋值给高位宽数据的问题,比如将12bit的a赋值给16bit的b。先讨论直接将低位宽的常数赋值给高位宽的数据时,位宽扩展遵循怎样的标准(不考虑x和z)。

    以下面的测试代码为例,将12bit的常数赋值给16bit的数据:

    在这里插入代码片wire [15:0] a = 12'd565;
    wire [15:0] b = -12'd565;
    wire [15:0] c = -12'sd565;
    reg [15:0] d = -12'sd565;
    

    仿真结果如下,分别展示了赋值结果的2进制和10进制:
    在这里插入图片描述

    对于正数,赋值结果为高位补0。**对于负数(二进制补码),无论是reg还是wire型、加s声明为带符号数或者不加s,结果都是高位补符号位。可见位宽扩展只与数据的正、负有关。**Verilog HDL的位宽扩展机制可以确保设计者安全、便捷地完成程序设计。

    “负数”与“带符号数”的区别

    由于负数必须需要符号’-'来规定,所以第一感觉就是将负数和带符号数二者等同。**其实两者并不完全相同,如果只加负号,不加s,虽然软件工具会将其用二进制补码表示,但仍不会将其当作带符号数signed看待。**看下面的示例代码:

    在这里插入代码片
    module test
    (
        input clk,
        output reg [15:0] a,b,c,d
    );
    
    always @ (posedge clk) begin
        a <= -12 / 3;
        b <= -'sd12 / 3;
        c <= -'d12 / 3;
        d <= -4'sd12 / 3;
    end
    
    endmodule
    

    仿真结果如下图:
    在这里插入图片描述
    对于a:在没有规定大小和基格式时,-12和3都视作带符号数,因此结果为正确的-4;

    对于b:-'sd12使用字符’s’声明这是个带符号数,结果同样是正确的-4;

    对于c:-'d12虽然声明这是个负数,但没有加-s,软件仍然不会将其视作带符号数,运算结果与预期不符;

    具体分析:+12为00……1100,取反为11……0011(共32位),加1得11……0100,由于没有申明为负数,因此做除法时,软件将其视为无符号数‭4,294,967,284‬,除以3得1,431,655,761‬,二进制存储为‭101 0101 0101 0101 0101 0101 0101 0001‬,由于定义为16位,仅保留低16位0101 0101 0101 0001‬,即十进制21841

    对于d:-4’sd12同时还指定了大小,但4’sd12已经超过了4bit带符号数的表示范围,它的值12(1100)实际意义上是-4(最高位符号位表示负数,二进制补码),前面再加’-'为正4,除以3,近似为整数后值为1。

    2.实常数赋值

    Verilog HDL本身是支持在代码中使用小数、科学计数法的,只不过赋值给整数型数据时,会发生隐式转换,转换为整数。看下面的示例:

    在这里插入代码片
    wire [15:0] a = 1e4;
    wire [15:0] b = 12.1;
    wire [15:0] c = 12.5;
    reg [15:0] d = -12.5;
    

    仿真结果如下:
    在这里插入图片描述
    数据a用科学计数法进行赋值。隐式转换的规则是:(1). 转换为最接近的整数;(2).中间值.5转换时,向远离0的方向进行。如数据c,12.5 => 13;数据d,-12.5 => -13。

    展开全文
  • c语言常量的正确表示方法有哪些C语言中的数值常量可以简单的分为如下两种整型常量和浮点数常量:一、整型常量 如6,27,-299在 C 语言中,整型常量分为十进制整型常量、八进制整型常量和十六进制整型常量三种表示...

    562c6974be330bfbea0643294fa1fcc8.png

    c语言常量的正确表示方法有哪些

    C语言中的数值常量可以简单的分为如下两种整型常量和浮点数常量:

    一、整型常量 如6,27,-299

    在 C 语言中,整型常量分为十进制整型常量、八进制整型常量和十六进制整型常量三种表示形式。

    推荐学习:c语言视频教程

    (1)十进制整型常量

    这种常量只能出现 0~9 的数字,且可带正、负号。例如:0 1 364 28 -34

    (2)八进制整型常量

    这种常量是以数字 0 开头的八进制数字串。其中数字为 0~7。例如:0111(十进制 73) 011(十进制 9) 0123(十进制 83)

    (3)十六进制整型常量

    这种常量是以 0x或 0X开头的十六进制数字串。其中每个数字可以是 0~9、a~f或 A~F 中的数字或英文字母。例如:0x11(十进制 17) 0Xa5(十进制 165) 0x5a(十进制 90)

    二、浮点型常量 如5.43,-2.3,5.67f

    实型常量有两种表示形式:一种是十进制小数形式,另一种是指数形式。

    (1)十进制小数形式

    十进制小数形式为包含一个小数点的十进制数字串。

    此类实型常量小数点前或后可以没有数字,但不能同时没有数字。例如:3.14159, .89, 56.0, 78., -3.0, 0.0

    (2)指数形式

    指数形式的格式由两部分组成:十进制小数形式或十进制整型常量部分和指数部分。

    其中指数部分是在 e 或 E(相当于数学中幂底数 10)后跟整数阶码(即可带符号的整数指数)。例如:1e15 //表示数值 1×10150.35e+1 //表示数值 0.35×10178e-1 //表示数值 78×10-1

    下面是不正确的实型常量。e15 //缺少十进制小数部分0.35e //缺少阶码78e-1.2 //不是整数阶码

    更多C语言编程入门教程,请关注龙方网络!

    展开全文
  • 不过需要注意:当字符串赋值的对象位宽较大时,左边会做补0处理,这样会对字符串的比较、拼接造成影响,结果可能与我们的预期不符,如下面示例代码: module test ( input clk, output reg [7:0] a,b,c,d ); ...

    阅读《IEEE Standard for Verilog 2005》时,做一些整理和记录。


    1.整数赋值

    按照Verilog 2005的标准:0-9、a-f、z、x称作数字位(digit);表示数字正负的’+‘和’-‘视作一元操作符(unary operator);常说的二进制、八进制、十进制、十六进制称作数字的基(base);其在Verilog中的表示’b’、‘o’、‘d’、'h’称作基格式(base format)字符;表示常数的bit数称作size。Verilog使用到的字符都是不区分大小写的。

    另外要明白二进制数本身的运算规则与一个数是signed还是unsigned、小数点在哪个位置没有任何关系,这些只是设计者人为的规定。但是在代码设计时,要标识清楚数据是signed或unsigned,目的有两个:(1).对设计者的提示;(2).一些操作符、IP核的数据端口,对数据是signed或unsigned的“身份”有要求。

    如果一个数是负数(前面加了’-’),那么它必定采用的是二进制补码形式。

    方式1

    常数赋值有两种,一种为直接赋值(符号+一串数字位),采用这种方式赋值时,默认数据是sigend形式。如下面一个简单的示例:

    module test
    (
        input clk,
        output reg [31:0] c
    );
    
    wire [31:0] a, b;
    
    assign a = -595;
    assign b = -10;
    
    always @ (posedge clk)
        c <= a + b;
    
    endmodule 
    
    

    对两个带符号数做加法运算,结果仍然是带符号数,Vivado中仿真时,将Radix设置为Signed Decimal,可以看到变量C的结果为-605。

    方式2

    另一种则是常见的基常数赋值方法(符号+size+单引号+基格式字符+一串数字位),如"assign a = +16’d53;", 符号和size是可有可无的。

    如果在基格式字符(b、o、d、h)前加上’s’,表示这是个带符号数signed;没有加’s’则表示是不带符号数unsigend。如果前面加了符号位“-”,会自动用二进制补码的形式。

    如下面的简单示例:

    `timescale 1ns / 1ps
    
    module test
    (
        input clk,
        output reg [31:0] c
    );
    
    wire [31:0] a, b;
    
    assign a = -32'd595;   // 加上size,省去s
    assign b = -'sd10;      // 省略size,加上s
    
    always @ (posedge clk)
        c <= a + b;
    
    endmodule 
    
    

    仿真结果与第一个示例相同。

    位宽扩展

    这里先不讨论将低位宽的数据赋值给高位宽数据的问题,比如将12bit的a赋值给16bit的b。先讨论直接将低位宽的常数赋值给高位宽的数据时,位宽扩展遵循怎样的标准(不考虑x和z)。

    以下面的测试代码为例,将12bit的常数赋值给16bit的数据:

    wire [15:0] a = 12'd565;
    wire [15:0] b = -12'd565;
    wire [15:0] c = -12'sd565;
    reg [15:0] d = -12'sd565;
    

    仿真结果如下,分别展示了赋值结果的2进制和10进制:

    对于正数,赋值结果为高位补0。对于负数(二进制补码),无论是reg还是wire型、加s声明为带符号数或者不加s,结果都是高位补符号位。可见位宽扩展只与数据的正、负有关。Verilog HDL的位宽扩展机制可以确保设计者安全、便捷地完成程序设计。

    “负数”与“带符号数”的区别

    由于负数必须需要符号’-'来规定,所以第一感觉就是将负数和带符号数二者等同。其实两者并不完全相同,如果只加负号,不加s,虽然软件工具会将其用二进制补码表示,但仍不会将其当作带符号数signed看待。看下面的示例代码:

    module test
    (
        input clk,
        output reg [15:0] a,b,c,d
    );
    
    always @ (posedge clk) begin
        a <= -12 / 3;
        b <= -'sd12 / 3;
        c <= -'d12 / 3;
        d <= -4'sd12 / 3;
    end
    
    endmodule
    

    仿真结果如下图:

    • 对于a:在没有规定大小和基格式时,-12和3都视作带符号数,因此结果为正确的-4;

    • 对于b:-'sd12使用字符’s’声明这是个带符号数,结果同样是正确的-4;

    • 对于c:-'d12虽然声明这是个负数,但没有加-s,软件仍然不会将其视作带符号数,运算结果与预期不符;

    • 对于d:-4’sd12同时还指定了大小,但4’sd12已经超过了4bit带符号数的表示范围,它的值12(1100)实际意义上是-4(最高位符号位表示负数,二进制补码),前面再加’-'为正4,除以3,近似为整数后值为1。


    2.实常数赋值

    Verilog HDL本身是支持在代码中使用小数、科学计数法的,只不过赋值给整数型数据时,会发生隐式转换,转换为整数。看下面的示例:

    wire [15:0] a = 1e4;
    wire [15:0] b = 12.1;
    wire [15:0] c = 12.5;
    reg [15:0] d = -12.5;
    

    仿真结果如下:

    数据a用科学计数法进行赋值。隐式转换的规则是:(1). 转换为最接近的整数;(2).中间值.5转换时,向远离0的方向进行。如数据c,12.5 => 13;数据d,-12.5 => -13。


    3.字符串(String)

    Verilog HDL同样也支持字符串的使用,使用双引号“”表示字符串内容,一个字符串必须放在一行内。在表达式和赋值语句中使用字符串,工具会将其视作无符号整数,一个字符对应一个8bit的ASCII码。

    \n、\r、\t、\\和\"等常用的转义字符,Verilog HDL也同样支持。

    下面是一个简单的测试代码:

    module test
    (
        input clk,
        output reg [8*4-1:0] c,
        output [8*4-1:0] d
    );
    
    assign d = "CUIT";
    always @ (posedge clk)
        c <= "CUIT";
    
    endmodule 
    

    仿真时可以看到,无论是reg还是wire类型,其存储的值本质都是“32’h43554954”,是一串ASCII码的组合。

    设计仿真激励文件时,字符串更多是一种让仿真结果更直观的辅助手段(如用在$display系统任务中)。硬件设计中也有一定用处,如在一些通信协议的设计中,直接使用字符串操作会便捷很多,起码不用对着ASCII码表查找。

    由于字符串的本质仍然是无符号整数,因此Verilog的各种操作运算对字符串也适用。比如用==和!=进行字符串的比较、用{ }完成字符串的拼接。不过需要注意:当字符串赋值的对象位宽较大时,左边会做补0处理,这样会对字符串的比较、拼接造成影响,结果可能与我们的预期不符,如下面示例代码:

    module test
    (
        input clk,
        output  reg  [7:0] a,b,c,d
    );
    
    reg [8*8-1:0] s1 = "Hello", s2 = " World!";
    reg [8*5-1:0] s3 = "Hello";
    reg [8*7-1:0] s4 = " World!";
    
    always @ (posedge clk) begin
        if ({s1,s2} == "Hello World!")
            a <= 1'b1;
        else a <= 1'b0;
            
        if ({s3,s4} == "Hello World!")
            b <= 1'b1;
        else b <= 1'b0;
    end
    
    endmodule 
    

    看起来s1和s2的拼接、s3和s4的拼接结果都应该是“Hello World!”,但仿真结果如下:

    !

    事实上,s1和s2进行字符串赋值时先要高位补0,再拼接后的值已经不是单纯的“Hello Wrold!”。s3和s4的位宽正好与字符串长度相等,赋值时没有补0,因此比较结果相等。

    ASCII码有个特殊的字符NUL,含义为空,码值为0。Verilog字符串中使用("")或("\0")都是表示NUL的含义,不会占据实际的存储空间。比如 reg [5*8-1:0] = “Hello\0”; 和 reg [5*8-1:0] = “Hello”; 的含义完全相同。


    4.标识符(identifier)

    常说的“数据名”、“变量名”,在标准中的规范名称应该是“identifier”。常见的标识符由字母、数字、$、下划线组成,其中数字和$不能是标识符的第一个字符。

    标识符其实有“最大长度限制”,不同软件可以自行规定,不过这个限制值最小也有1024个字符。

    这里专门提到标识符,是想记录一下比较陌生的转义标识符(escaped identifier),不过一般也用不到Verilog的这个特性。

    一般的标识符对使用到的字符有限制,转义标识符可以使用所有可显示的ASCII字符。转字标识符必须以’\'为开头以空格、Tab键盘、换行其中之一为结尾

    看下面的简单示例代码,注意表达式和赋值语句的分号前都加了空格:

    module test
    (
        input clk,
        output [23:0] c,
        output d
    );
    
    reg \75 ;
    reg [23:0] \{a+b} ;
    reg \always ;
    reg \flag ;
    
    always @ (posedge clk) begin
        \75 <= 1'b1;
        \{a+b} <= 23'd565;
        \always <= 1'b1;
        flag <= 1'b0;
    end
    
    assign d = \75 ;
    assign c = \{a+b} ;
    
    endmodule 
    

    如果转义标识符中没有用到其它特殊字符,则本质上仍然是一般的标识符。上面的代码中,定义时为 \flag,使用时直接用 flag 即可。

    有个特殊情况,就是转义字符直接使用Verilog HDL中保留的关键字,如上面的 \always,不过使用时前面的’\'不能省略。

    展开全文
  • UNICODE与多字节字符集等字符问题

    千次阅读 2013-04-12 10:00:10
    VS2008默认的字符集是Unicode,而VC6.0默认是多字节字符集,Unicode...比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是 两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两


    VS2008默认的字符集是Unicode,而VC6.0默认是多字节字符集,Unicode字符集你要加_T("")或L"",你也可以“

    工程-属性-修改字符集”。


     1. UNICODE:它是用两个字节表示一个字符的方法。比如字符'A'在ASCII下面是一个字符,可'A'在UNICODE下面是

    两个字符,高字符用0填充,而且汉字'程'在ASCII下面是两个字节,而在UNICODE下仍旧是两个字节。UNICODE的

    用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。 
     
     2. MBCS,它是多字节字符集,它是不定长表示世界文字的编码。MBCS表示英文字母时就和ASCII一样(这也是我们

    容易把MBCS和ASCII搞混的原因),但表示其他文字时就需要用多字节。

     

    WINDOWS下面的程序设计可以支持MBCS和UNICODE两种编码的字符串,具体用那种就看你定义了MBCS宏还是

    UNICODE宏。MBCS宏对应的字符串指针是char*也就是LPSTR,UNICODE对应的指针是unsigned   short*也就是

    LPWSTR,为了写程序方便微软定义了类型LPTSTR,在MBCS下他就是char*,   在UNICODE下它是unsigned  

    char*,这样你就可以重定义一个宏进行不同字符集的转换了。


    3. LPTSTR、LPCSTR、LPCTSTR、LPSTR的意义

    LPSTR:  32-bit指针 指向一个字符串,每个字符占1字节
    LPCSTR:  32-bit指针 指向一个常字符串,每个字符占1字节
    LPCTSTR: 32-bit指针 指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义
    LPTSTR:  32-bit指针 每字符可能占1字节或2字节,取决于Unicode是否定义

     

    Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节

    字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。WindowsNT的所有与字符

    有关的函数都提供两种方式的版本,而Windows9x只支持ANSI方式。_T一般同字常数相关,如_T("Hello"。如果

    你编译一个程序为ANSI方式,_T实际不起任何作用。而如果编译一个程序为UNICODE方式,则编译器会把"Hello"

    字符串以UNICODE方式保存。_T和_L的区别在于,_L不管你是以什么方式编译,一律以UNICODE方式保存.

     

     4. 例1:

    Windows核心编程的第一章。

    L是表示字符串资源为Unicode的。

    比如
    wchar_t Str[] = L"Hello World!";    这个就是双子节存储字符了。

    _T是一个适配的宏~


    #ifdef _UNICODE的时候
    _T就是L
    没有#ifdef _UNICODE的时候
    _T就是ANSI的。

     

    比如

    LPTSTR lpStr = new TCHAR[32];
    TCHAR* szBuf = _T("Hello");
    以上两句使得无论是在UNICODE编译条件下都是正确编译的。

    而且MS推荐你使用相匹配的字符串函数。
    比如处理LPTSTR或者LPCTSTR 的时候,不要用strlen ,而是要用_tcslen

    否则在UNICODE的编译条件下,strlen不能处理 wchar_t*的字符串。

    T是非常有意思的一个符号(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一种中间类型,既不

    明确表示使用 MBCS,也不明确表示使用 UNICODE。那到底使用哪种字符集?编译的时候才决定


    在大多数情况下,CString 转换成 LPTSTR是非常容易的,如果函数要求传入LPTSTR型的参数,直接传一个

    CString也行,但是在visual studio 2008中,却偶尔会出现不能转换的情况,这个为什么呢?

    有人以为这是ASCII(多字节)与Unicode(宽字节)之间的问题,其实不是,要知LPTSTR这个宏是随编译器参数

    不同而不同的,如果在编译器——常规里面设置程序按ASCII编译,那LPTSTR就表示char*,如果选择按Unicode

    编译那就是wchar_t*。CString也是如此,随编译器选项的不同,可以是ASCII字符串也可以是Unicode字符串。

    那么CString与LPTSTR,要么全是多字节,要么全是宽字节,不可能存在两者之间不能转换的问题。

     

    例2:

    1. 如何将 CString 型转换为 LPBYTE 
    CString   str;   
    LPBYTE   by   =   (LPBYTE)(LPCSTR)str;

     

    2. LPBYTE 如何转为CString 型

    CString   str;

    str.Format("%s", by);


    在vc++中有着各种字符串的表示法,如您所说。        
        首先char*   是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。      
     LP的含义是长指针(long   pointer)。
    LPSTR是一个指向以‘’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。    
        为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。    
        LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。       
     然后为了实现两种编码的通用,提出了TCHAR的定义:   
    如果定义_UNICODE,声明如下:     typedef   wchar_t   TCHAR;    
    如果没有定义_UNICODE,则声明如下:     typedef   char   TCHAR;     
    LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。       
    CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。

    展开全文
  • C++0x导读 - 2.13 常数

    千次阅读 2009-02-03 20:22:00
    返回目录C++0x支持以下7种类型的常数(其中后两种是C++0x新增的):整型常数 字符常数 浮点常数 字符串常数 布尔常数 指针常数自定义常数1、整型常数(注:因为long long是C++0X才正式加入的,所以目前不同的编译器...
  • 字符编码详解

    千次阅读 2016-12-29 11:01:36
    字符编码又是计算机的重要基础之一,正确处理字符的输入输出、存储显示问题,是进行下一步软件开发或网站建设的必要前提。 本文将从字符集和字符编码等基础概念出发,详细介绍字符编码所涉及到的点点滴滴,力求...
  • 字符串数组与字符串指针

    千次阅读 2016-01-04 19:01:43
    最近在学指针,感觉内容繁多,概念不好掌握,除了上自己班的编程课,还去蹭了别人班的课,感觉很有收获,担心自己及时总结就会忘了,也方便如后复习回顾和学习交流。  首先,先说一个非常基础的概念,...
  • 字符编码ASCII,Unicode和UTF-8

    千次阅读 2015-01-08 15:50:03
    但是计算机能直接处理这些字符和标记;它们只认识位(bit)和字节(byte)。实际上,从屏幕上的每一块文本都是以某种字符编码(character encoding)的方式保存的。粗略地说就是,字符编码提供一种映射,使屏幕上显示
  • 小结字符集及字符编码问题

    千次阅读 2014-10-25 17:24:02
    字符编码问题一直深深困扰着我~无论是网页还是数据库抑或是单纯的文件字符...一直以来我常常把字符编码和字符集混着说,而周围的人大多也都区分它们的含义。不过真要较真的话,字符编码和字符集其实还是很有区别的。
  • 由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。 sprintf 是个变参函数,定义如下:
  • 常用的宽字符函数

    千次阅读 2013-03-22 12:39:14
    所以在MFC编程中,一般需要使用双字节的字符类型wchar_t和对应的字符串及其指针类型LPCWSTR和LPCTSTR,并在常数字符串前添加了L转换符,串长计算函数能用strlen而改用wcslen,串格式打印函数也能用sprintf,而是...
  • 字符串匹配

    千次阅读 2012-09-28 16:26:41
    字符串匹配的朴素算法 ... 字符串 T = abcabaabcabac,字符串 P = abaa,判断P是否是T的子串,就是字符串匹配问题了,T 叫做文本(Text) ,P 叫做模式(Pattern),所以正确描述是,找出所有在文本 T = abcabaab
  • 如今,我们虽然仍然把电脑称为计算机,但是如今它处理的文字...这部分内容介绍了C++中的库,这个库提供了很多方便的处理字符串的抽象。有这个库,你将会更容易编写有趣的应用程序。  Using strings as abstract values
  • 比如字符A在ASCII下面是一个字符,可A在UNICODE下面是两个字符,高字符用0填充;而汉字程在ASCII下面是两个字节,在UNICODE下仍旧是两个字节。UNICODE的用处就是定长表示世界文字. MBCS:是多字节字符集,它是定长...
  • VC++ 字符串操作学习总结

    千次阅读 2017-04-05 15:55:57
    vc++中各种字符串(转载) http://www.cnblogs.com/tomin/archive/2008/12/28/1364097.html CString ,BSTR ,LPCTSTR之间关系和区别 CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统...
  • 整型和字符串相互转换

    千次阅读 2016-04-30 08:39:41
    整型和字符串相互转换  (2009-09-07 11:15:00) 转载▼ 标签:  整型字符串转换   iota   atoi   sprintf   用法   教育   分类: 学习资料 我们写...
  • windows 字符串处理

    千次阅读 2017-02-06 11:32:12
    在 windows 开发的必要知识我对字符编码做了一个应该还算可以的解释。之后我们来谈谈windows 的字符。windows 中的字符串在C/C++中的每一种数据类型大小都是和系统相关的,在window下1字节大部分情况是8bit,short大...
  • UNICODE与MBCS等字符问题

    千次阅读 2010-03-24 09:33:00
    VS2008默认的字符集是Unicode,而VC6.0默认是多字节字符集,Unicode字符集...比如字符A在ASCII下面是一个字符,可A在UNICODE下面是两个字符,高字符用0填充,而且汉字程在ASCII下面是两个字节,而在UNICODE下仍旧是两个
  • AWK中的字符串操作函数

    千次阅读 2020-01-29 11:46:13
    文章目录gensub()参考文档 本节中的功能查看或更改一个或多个字符串的文本。 gawk理解语言环境,并用字符而非字节进行所有...同样, index()适用于字符索引,而适用于字节索引。 示例: # cat file1 1.2.3.4 1.2....
  • C语言字符串常用操作函数C语言字符串、文件操作常用操作函数标准输入/输出重定向文件操作补充 C语言字符串、文件操作常用操作函数 字符串输出 - puts int puts(const char *str) 字符串写入到标准输出 stdout 字符...
  • 一个偶然的机会发现字符串排序也可以使用基数排序来实现,而且是一个很有意思的问题,因为这其中有一个渐进优化的过程,本文先考虑字符串排序的几种实现方法,然后从理论上分析使用基数排序的复杂度,最后将其与快排...
  • VC++字符

    千次阅读 2007-09-06 09:38:00
    CString ,BSTR ,LPCTSTR之间关系和区别CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。CString 是一个完全独立的类,动态的TCHAR数
  • julia:字符串(完结)

    千次阅读 2018-08-31 23:43:00
    字符字符串是由有限个字符组成的序列。然而, 字符又是什么呢。说英文者所熟悉的字符是字母 A, B, C, …,以及数字和常用的标点符号。这些字符由 ASCII 标准统一标准化并且与 0 到 127 范围内的整数一一对应。...
  • 字符串算法大整理!你能想到的都能找到(吧)。 2018.7.16 Chengdu 今天学习了字符串相关的一些算法,种类挺多的,特来整理一波。 字符串哈希(Hash) 简介 原理 哈希查找 字符串哈希 哈希的弊端 &amp...
  • gets()函数用来从 标准输入设备(键盘)读取字符串直到 回车结束,但回车符('\n')属于这个字符串。 调用格式为: gets(str); 其中str为字符串变量(字符串数组名或字符串指针)。 gets(str) ...
  • 字符串常量的存储区

    千次阅读 2014-05-26 23:24:23
    字符串常量,放在哪个存储区呢?是“自动存储区”还是“静态存储区”中? 比如: char *pstr="hello world!"; 这里,"hello world!"是一个字符串常量, pstr是在栈中的变量。 我想问,字符串常量,在...
  • c语言字符串 数字转换函数大全

    千次阅读 2016-08-20 09:54:33
    atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) strtod(将字符串转换成浮点数) strtol(将字符串转换成长整型数) strtoul(将字符串转换成无符号长整型数) toascii...
  • [ACM] 常数和语言基础

    千次阅读 2016-02-17 17:26:27
    常用,容易出错,比如下面的例子: cin>>ch; cout; scanf("%c",&ch); cout;  上面四句话,运行结果第二个cout输出的不是我们原来输入的字符,因为如果第一次输入字符后,按了回车,那么第二次...
  • 一.ANSI和UNICODE 2.ANSI字符和Unicode字符 ANSI字符类型为CHAR,指向字符串的指针PSTR(LPSTR),指向一个常数字符串的指针PCSTR(LPCSTR);对应的Windows定义的Unicode字符类型为WCHAR(typedef WCHAR wchar_t) ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,191
精华内容 12,476
关键字:

下面字符常数不正确的是