文档库 最新最全的文档下载
当前位置:文档库 › c语言实现数制转换

c语言实现数制转换

c语言实现数制转换
c语言实现数制转换

.数制转换。

编写程序,将十进制整数N转换为d进制数,其转换步骤是重复以下两步,直到N等于0。

X=N mod d (其中mod为求余运算)

N=N div d (其中div为整除运算)

测试数据:以十进制到二进制转换为例

输出结果为:(789)10→(1100010101)2

注意:要求使用栈的基本运算(包括InitStack(S),Pop(S),Push(S),IsEmpty(S)。应引用栈的头文件实现)。

#include

#define StackSize 50

typedef struct

{

int elem[StackSize];

int top;

}SeqStactk;

void InitStack(SeqStactk *S)

{

S->top=-1;

}

int IsEmpty(SeqStactk *S) /*判断栈空运算*/

{

if (S->top==-1) /*栈空*/

return 1;

else /*栈不空*/

return 0;

}

void Push(SeqStactk *S,int *a)

{

//将a置入S中栈顶

if(S->top==StackSize-1)

return;

else{

S->top++;

S->elem[S->top]=*a;

}

}

//出栈

int Pop(SeqStactk *S,int *b)

{

//将s栈顶元素弹出,放到b所指向空间

if (S->top==-1)

return -1;

else {

*b=S->elem[S->top];

S->top--;

return *b;

}

}

int main(void)

{

SeqStactk S;

int x,d,a,b;

InitStack(&S);

printf("栈%s\n",(IsEmpty(&S)==1?"空":"不空"));

printf("输入十进制数x:");

scanf("%d",&x);

printf("输入想求几进制d:");

scanf("%d",&d);

while(x!=0)

{

a=x%d;

Push(&S,&a);

x=x/d;

}

printf("输出%d进制数:",d);

while(Pop(&S,&b)!=-1)

{

printf("%d",b);

}

printf("\n");

return 0;

}

C语言中的强制类型转换运算

C语言中的强制类型转换运算 C语言中的强制类型转换是通过类型转换运算来实现的。 其一般形式为: (类型说明符)(表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 例如: (float)a 把a转换为实型 (int)(x+y)把x+y的结果转换为整形 在使用强制转换时应注意以下问题: 1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如果把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。 2)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性的转换,而不改变数据说明时对该变量定义的类型。 【例1】 #include int main (void) { float f = 3.14; printf("(int)f = %d,f = %.2f\n",(int)f,f); return 0; } 本例表明,f虽强制转为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f的值为5(删去了小数)而f的值仍为5.75. 1、求余运算符(模运算符)“%”:双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。 #include int main (void) { printf(" %d\n",110%3);

return 0; } 本例输出110除以3所得的余数2。 2、算数表达式和运算符的优先级和结合性 表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型,他们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。 算数表达式是由算术运算符和括号连接起来的式子。 算数表达式:用算数运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。 以下是算数表达式的例子: a+b; (a*2)/c; (x+r)*8-(a+b)/7; ++I; Sin(x)+sin(y); (++i)-(j++)+(k--); 运算符的优先级:C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。 运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z,则先执行x-y运算,然后再执行+z运算。这是左结合性。右结合性最典型的是赋值运算符。如x=y=z. 3、强制类型转换运算符 其一般形式为: (类型说明符)(表达式)

C语言课程设计--进制转换

C 语言 课程设计报告 设计题目:进制转换 学生姓名: 学生学号:20101010110 专业班级:数学与应用数学一班 学院名称:数学与计量经济学院 同组人姓名: 指导老师: 2011年6 月16 日

目录 1.需求分析........................................................1 1.1问题描述....................................................1 1.2输入数据的要求..............................................1 1.3输出数据的要求..............................................1 1.4开发环境和工具..............................................1 1。.5成员分工...................................................1 2.总体设计........................................................2 2.1设计思路...................................................3 2。.2模块结构图...............................................4 3.详细设计........................................................7 3.1数据类型的定义...............................................7 3.2总的实现......................................................8 4.系统测试........................................................9 5.总结...........................................................·10 6.参考文献及附录............................................11

C语言实现任意进制转换

#include #include #include void dtox(double num,int jz) { char xnum[100]; int dnum=(int) num; int i=0,j=0,e = 0; while(dnum>=jz) { xnum[j++]=dnum%jz+48; dnum=dnum/jz; } xnum[j] = dnum+48; for(i = j;i>=0;i--){ printf("%c",xnum[i]); } if(dnum - num != 0){ printf("."); num = num - (int)num; do { e++; printf("%c",(int)(num*jz)+48); num = num*jz-(int)(num*jz); if(num == 0)break; } while(e<20); } } double xtod(char num[],int jz) { double dnum = 0; int i,j,k=0,n=0,b; for(i=0;;i++) { if(num[i]=='\0')break; else n++; if(num[i]=='.'){j=i;k=1;} } for(i=j-1;i>=0;i--) { dnum =dnum + (double)(num[j-i-1]-48)*pow(jz,i); }

if(k==1) { for(i=j+1;i

十六进制数转换成十进制数C语言

十六进制数转换成十进制数C语言 程序代码: #include #include #include /*求字符串长度函数*/ int strlengh(char *s) { int i; for(i=0;s[i]!='\0';i++); return i; } /*16进制转10进制函数*/ double tran(char *s) { int len=strlengh(s);/*求输入的字符串的长度*/ int ss[100] ;/*用于存放对字符的转换如f:15*/ int i; double n=0.0; /*对字符进行处理,将其每一位转换为整数,之后运算进行处理*/ for(i=0;i

进制转换C语言的实现

索引 一、算法分析 二、数据结构: 1、头文件 2、栈的关键操作 三、关键程序: 1、十进制进制转换为其它 2、其它进制转换为十进制 一、算法分析 实现进制转换需要编个函数,每一函数完成相应进制的转换,下面是各个进制之间转换的数学方法的算法。 十进制转二进制: 十进制数转换成二进制数,是一个连续除2的过程;把要转换的数,除以2,得到商和余数,将商继续除以2,直到商为0.最后将所有余数倒序排列,得到数就是转换结果。 例如: 302/2 = 151 余0 151/2 = 75 余1 75/2 = 37 余1 37/2 = 18 余1 18/2 = 9 余0 9/2 = 4 余1 4/2 = 2 余0 2/2 = 1 余0 所以302转换为2进制,结果:100101110

十进制转八进制: 十进制数转换成八进制的方法和转换为二进制的方法类似,唯一变化:除数由2变成8。 例如: 120/8=15余0 15/8=1余7 1/8=0余1 所以120转换为8进制,结果为:170 十进制转十六进制: 十进制数转换成十六进制数的方法和转换为二进制的方法类似,唯一变化:除数由2变成16。 不过,十六进制数:(10~15)是用英文大写字母(A~F)表示。例如: 123/16=7余11 所以123转换为16进制,结果为:7B 二进制转十进制: 二进制数转换为十进制数按权展开,第0位的权值是2的0次方,第1位的权值是2的1次方〃〃〃〃〃〃 例如: 1010转换成十进制数:

第0位:0*2^0=0 第1位:1*2^1=2 第2位:0*2^2=0 第3位:1*2^3=8 所以转换为10进制数为:0+2+0+8=10 二进制转八进制: 利用421,从后往前每三位一组,缺位除补0,然后按十进制方法进行转换。 例如: (11001) 001=1 011=3 然后将结果按从下往上顶顺序书写:31 二进制转十六进制: 二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算;利用8421,对于任意一个4位的二进制数,都可以很快算出它对应的10进制值。 例如: 1111=8+4+2+1=15 又因为十六进制数:10~15用大写字母A~F表示,所以15为F。

C语言中不同的结构体类型的指针间的强制转换详解

C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险。只要理解了其内部机制,你会发现C是非常灵活的。 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在结构体中的偏移地址。 变量的值是以二进制形式存储在内存中的,每个内存字节对应一个内存地址,而内存存储的值本身是没有整型,指针,字符等的区别的,区别的存在是因为我们对它们有不同的解读,param的值就是一个32位值,并且存储在某个内存单元中,通过这个32位值就能找到param所指向的结构的起始地址,通过这个起始地址和各个结构所包含变量离起始地址的偏移对这些变量进行引用, param->bIsDisable只是这种引用更易读的写法,只要param是指向 PAINT_PARAM的指针,那么param的值就肯定存在,param存在,偏移量已知,那么param->bIsDisable就肯定存在,只是要记住,param->bIsDisable只是代表了对param一定偏移地址的值。 不是说某个地址有那个结构体你才能引用,即使没有,你也能引用,因为你已经告诉了编译器param变量就是指向一个PAINT_PARAM结构体的变量并且指明了param的值,机器码的眼中是没有数据结构一说的,它只是机械的按照 指令的要求从内存地址取值,那刚才的例子来说,peg->x,peg->y的引用无论 0x30000000是否存在一个eg结构体都是合法的,如果0x30000000开始的8 个字节存在eg结构体,那么引用的就是这个结构体的值,如果这个位置是未定义的值,那么引用的结果就是这8个字节中的未定义值,内存位置总是存在的,而对内存中值的引用就是从这些内存位置对应的内存单元取值。 举个例子: typedefstruct_eg { int x; int y; }eg;

最新C任意进制转换程序

C任意进制转换程序 C语言写的一个任意进制转换的程序,不使用库提供的转换函数. / scale.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include #include #include #include #define WIDTH 10 #define DATAWIDTH 50 #define MAX 4294967295 #define CONST_2 2 #define CONST_3 3 #define CONST_8 8 #define CONST_9 9 #define CONST_10 10 #define CONST_16 16 #define CHAR_0 '0' #define CHAR_9 '9' #define CHAR_A 'A' #define CHAR_a 'a'

#define CHAR_Z 'Z' #define CHAR_SPACE ' ' #define STRING_0 "0" #define STRING_Z "Z" bool Scale(); bool GetSourceScale(int * scale_in); bool GetObjectScale(int * scale_out); double OtherToDeci(int scale_in,char inputdata[]); void DeciToOther(unsigned long deci,int scale_out,char outputdata[]); bool GetData(char data[],int CONCOUNT,int flg); bool GetScale(char temp[]); bool GetSource(int in_scale,char inputdata[]); void ScaleChange(int scale_in,char inputdata[],int scale_out,char outputdata[]); void CleanScreen(); int _tmain(int argc, _TCHAR* argv[]) { int flg = 0; char cs[WIDTH]; memset(cs,0x00,sizeof(cs)); while(1) { printf("-----------------------------------------------------------------\n" ); printf(" Data Transform Between Two Scales \n"); printf(" ----------------------------------------\n"); /*进制转换主函

(C语言)10进制转换2,8,16进制

(C语言)10进制转换2,8,16进制 作者:vinseven #include"stdio.h" #include"conio.h" #include"malloc.h" #include"windows.h" #define ElemType int void menu(); void TenToTwo(); void TenToEight(); void TenToSixteen(); void InitStack(struct sNode **HS); void Push(struct sNode **HS,ElemType x); ElemType Pop(struct sNode **HS); ElemType Peek(struct sNode **HS); int EmptyStack(struct sNode **HS); void ClearStack(struct sNode **HS); int ten;/*要输入的10进制数*/ int x;/*把将要插入到栈中的元素暂时存进x 中*/ struct sNode hs;

struct sNode { ElemType data; struct sNode *next; }; void main() { menu(); getch(); } void menu() { char choice; int flag=1; while(1) { printf("\n\t\t\t________________________\n\n\n"); printf("\t\t\t 1,10进制转换2进制\n\n\n"); printf("\t\t\t 2,10进制转换8进制\n\n\n"); printf("\t\t\t 3,10进制转换16进制\n\n\n"); printf("\t\t\t 0,退出\n\n\n");

C语言类型强制转换

C语言类型强制转换 本篇主要介绍 C语言类型强制转换。 强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。例如: (float) a 把a转换为实型(int)(x+y) 把x+y的结果转换为整型在使用强制转换时应注意以下问题: 1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y) 写成(int)x+y则成了把x转换成int型之后再与y相加了。 2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进 行的临时性转换,而不改变数据说明时对该变量定义的类型。 例1: main() { float f=5.75; printf("(int)f=%d,f=%f\n",(int)f,f); } f<--5.75 将float f强制转换成int f float f=5.75;printf("(int)f=%d,f=%f\n",(int)f,f); 本例表明,f虽强制转为int 型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f 的值为 5(删去了小数)而f的值仍为5.75。 例2:比如我们可以(int)'A',这样转换后的结果为A的ASCII码数值,因为那块内存本来就存的那个数,只是换个形式使用而已。知道上面的原则,我们 可以对任何数据类型进行转换,但是转换的结果可能不是你想像的结果,举例 (int)'9'的结果为多少?不是9而是0x39。来个高深点的printf("%d",'12'); 的输出是什么?正确答案是12594,因为printf("%d",'12'),打印的是存储12 的内存地址上的内容,即ASCII码值2存储在低位,1储在高位地址,0x32就是2 的ASCII码,0x31就是1的ASCII码,所以是0x3132,转换成10进制就是12594!

c语言强制转换四舍五入

在C语言中,强制转换后的数是四舍五入还是去尾? 去尾 要想四舍五入的话 (int)(number+0.5) 都是直接去尾的。当为数太多时直接截断。所以在强制转换时要很注意 C语言有没有数据的四舍五入?什么情况下会用到四舍五入?数据类型转换?有四舍五入的情况,在你想要保留几位小数的时候,多余的紧接着的一位要四舍五入 不过C里面没有提供四舍五入的函数,不过你可以这样 a = (int)(a*100 + 0.5)/100 这只是一个小技巧,对a的第三位进行四舍五入 提问者评价 +0.5可以解决这个问题!谢谢你! C语言中的float和double类型数据是浮点数,所以小数部分就存在四舍五入问题,当指定输出位数在精度范围之内时,系统会自动舍入,无需人工干预,如果小数部分也在精度范围内,比如10.0/2.0 = 5.0,2位以上的输出位数时,后面的都是0,此时,当然不需要舍入了。 数据类型转换有两种方式,一种是默认强制转换,比如将char、short、Int、Long和float类型数据赋给double类型变量时,编译程序会自动实施转换,这是因为,在精度更高时,这样的转换是内有损失的。另一种是手动强制类型转换,比如dnum = (double)inum;,意思是将整形变量inum首先转换为双精度数据,然后再付给dnum。当将高精度类型变量赋给低精度类型变量时,除非手动强制转换,否则,编译程序会有提示的。 数据强制转换是用舍弃的方法,不会用四舍五入,什么时候用四舍五入是需要详细说明的,也就是你的业务需求而定,你可以把数字+0.5,然后进行强制转换 ouble强制转换成int型的时候保留整数部分的。。 比如double a=1.5; int b=a; a就是1。 C语言强制类型转换问题 2012-03-11 17:52匿名|分类:C/C++ |浏览2634次 int a,b; //keil c里的int,也就是16位。 a=0000; b=0x1234; a=(char)(b);

(c语言程序设计)10进制数转化为其它进制数

//用顺序栈来实现进制转换 #include #include #include #include #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 typedef int SElemType; typedef int Status; typedef struct { SElemType *base; SElemType *top; int stacksize; //栈容量 }SqStack; SqStack S; Status InitStack(SqStack &S){ //构造一个空栈 S.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if(!S.base) exit(0); //存储空间失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 0; } Status GetTop(SqStack S,SElemType &e) //若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1 { if(S.top==S.base) return 1; e=*(S.top-1); return 0; } Status Push(SqStack &S ,SElemType e) //插入元素e为新的栈顶元素 { if(S.top-S.base>=S.stacksize) //如果栈满,则追加存储空间 { S.base=(SElemType *)realloc (S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) return 1 ; //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;

C语言数据类型及转换

C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。 本章将介绍基本类型中的整型、实型和字符型三种数据。 2.3 常量和变量 2.3.1 常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。 2.3.2 变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。 3.标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在TC V2.0中,变量名(标识符)的有效长度为1~32个字符,缺省值为32。 (3)C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗?标识符命名的良好习惯──见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。 4.变量的定义与初始化 在C语言中,要求对所有用到的变量,必须先定义、后使用;且称在定义变量的同时进行赋初值的操作为变量初始化。

任意进制转换(数据结构c语言版)

以下是在vc++6.0下运行的结果,我列举了输入345,进制分别为2,8,16的得出的结果,下面的不止只有这三个,输入任意进制的都可以 输入一个整数和进制数:345,2 转换成进制之后的数:101011001 Press any key to continue 输入一个整数和进制数:345,2 转换成进制之后的数:101011001 Press any key to continue 输入一个整数和进制数:345,16 转换成进制之后的数:159 Press any key to continue

程序如下: #include #include #define TRUE 1 #define FALSE 0 #define Stack_Size 100 typedef int StackElementType; typedef struct { StackElementType elem[Stack_Size]; int top; }SeqStack; void InitStack(SeqStack *S) { S->top=-1; }

int Push(SeqStack *S,StackElementType x) { if(S->top==Stack_Size-1) return(FALSE); S->top++; S->elem[S->top]=x; return(TRUE); } int Pop(SeqStack *S,StackElementType *x) { if(S->top==-1) return(FALSE); else { *x=S->elem[S->top]; S->top--; return(TRUE); }

c语言实现数制转换

.数制转换。 编写程序,将十进制整数N转换为d进制数,其转换步骤是重复以下两步,直到N等于0。 X=N mod d (其中mod为求余运算) N=N div d (其中div为整除运算) 测试数据:以十进制到二进制转换为例 输出结果为:(789)10→(1100010101)2 注意:要求使用栈的基本运算(包括InitStack(S),Pop(S),Push(S),IsEmpty(S)。应引用栈的头文件实现)。 #include #define StackSize 50 typedef struct { int elem[StackSize]; int top; }SeqStactk; void InitStack(SeqStactk *S) { S->top=-1; } int IsEmpty(SeqStactk *S) /*判断栈空运算*/ { if (S->top==-1) /*栈空*/ return 1; else /*栈不空*/ return 0; } void Push(SeqStactk *S,int *a) { //将a置入S中栈顶 if(S->top==StackSize-1) return; else{ S->top++; S->elem[S->top]=*a; } } //出栈 int Pop(SeqStactk *S,int *b) { //将s栈顶元素弹出,放到b所指向空间 if (S->top==-1) return -1; else { *b=S->elem[S->top];

S->top--; return *b; } } int main(void) { SeqStactk S; int x,d,a,b; InitStack(&S); printf("栈%s\n",(IsEmpty(&S)==1?"空":"不空")); printf("输入十进制数x:"); scanf("%d",&x); printf("输入想求几进制d:"); scanf("%d",&d); while(x!=0) { a=x%d; Push(&S,&a); x=x/d; } printf("输出%d进制数:",d); while(Pop(&S,&b)!=-1) { printf("%d",b); } printf("\n"); return 0; }

c语言强制类型转换相关内容

c语言强制类型转换 首先定义一个结构体: struct Node{ int num1; int num2; } 一、如果在函数中申明了一个指向结构体的指针:一下为两种情况 1)Node * node1; 这时候在这个指针指向的地方已经申请了struct node大小的空间,但是其中的num1 和num2的值是一个不确定的随机值。 2)Node * node1 = NULL; 在这种情况下这个指针没有指向任何地方,也没有申请任何空间,所以num1和num2是不存在的。如果要显示node1的值,有些编译器在这 种情况下是报错的,gcc不会报错,但是在显示的时候会显示段错误 二、下面说一下在子函数调用的时候的结构体指针的类型转换 main() { unsigned long add; … fun ((struct Node *)addr); } void fun(struct Node *node2) { } 其中addr是已经在一个地址,只不过是以unsigned long的形式存在 情况一、如果addr这个地址指向的是一个已经被数据填充的区域,在这种调用关系中就会产生段错误,可能会覆盖已有的数据。一般运行过程中会发生内存错误而中断程序的执行。 情况二、如果addr 这个地址指向的是一个没有被数据填充的区域,在这种情况下,调用子函数会建立相应的struct Node数据结构,这个数据结构式在当前地址下开始建立的。这种情况用于嵌入式体统中,程序员对内存的区域非常熟悉,知道下一个地址肯定是未被使用的区域,否则后果不堪设想。 常规做法是在main函数中申请struct node空间,然后把地址传递给子函数进行操作,这样操作的结果是会被返回到主函数中,这是非常安全的做法。而申请这样的空间可以用动态内存分配的方法。上述情况一二之所以会出错或者非常危险,是因为它不符合内存动态非配的原理,没有动态申请内存,而把当前已有的空间(非struct node类型的空间)强制转换为了struct node 类型的空间进行了使用,这当然是危险的,也是不允许的。上述的两种情况只有在pc机重启或者嵌入式系统设计的时候会出现。

C语言各种数值类型转换

C语言数据类型转换1 CString,int,string,char*之间的转换 string 转CString CString.format("%s", string.c_str()); char 转CString CString.format("%s", char*); char 转string string s(char *); string 转char * const char *p = string.c_str(); CString 转string string s(CString.GetBuffer()); 1,string -> CString CString.format("%s", string.c_str()); 用c_str()确实比data()要好. 2,char -> string string s(char *); 你的只能初始化,在不是初始化的地方最好还是用assign(). 3,CString -> string string s(CString.GetBuffer()); GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 《C++标准函数库》中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”\0“的字符串数组 2,c_str(),返回有”\0“的字符串数组 3,copy() CString互转int 将字符转换为整数,可以使用atoi、_atoi64或atol。 而将数字转换为CString变量,可以使用CString的Format函数。如 CString s; int i = 64; s.Format("%d", i) Format函数的功能很强,值得你研究一下。

C语言各种数值类型转换函数

C语言各种数值类型转换函数 atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) strtod(将字符串转换成浮点数) strtol(将字符串转换成长整型数) strtoul(将字符串转换成无符号长整型数) toascii(将整型数转换成合法的ASCII 码字符) toupper(将小写字母转换成大写字母) tolower(将大写字母转换成小写字母) atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include 定义函数 double atof(const char *nptr); 函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时 ('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负号、小数点或E(e)来表示指数部分,如123.456或123e-2。 返回值返回转换后的浮点型数。 附加说明 atof()与使用strtod(nptr,(char**)NULL)结果相同。 范例 /* 将字符串a 与字符串b转换成数字后相加*/ #include main() { char *a=”-100.23”; char *b=”200e-2”; float c; c=atof(a)+atof(b); printf(“c=%.2f\n”,c); } 执行 c=-98.23 atoi(将字符串转换成整型数) 相关函数 atof,atol,atrtod,strtol,strtoul 表头文件 #include 定义函数 int atoi(const char *nptr); 函数说明 atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时 ('\0')才结束转换,并将结果返回。 返回值返回转换后的整型数。 附加说明 atoi()与使用strtol(nptr,(char**)NULL,10);结果相同。 范例 /* 将字符串a 与字符串b转换成数字后相加*/

C进制文本转换为ascii码

我用的将16进制文本转换为ascii码的C语言代码。16进制文本复制到文件test.txt中,运行程序,将得到输入。 例: 运行:./CSTRING test.txt 其中,test.txt文件内容为: 30:31:32 则得到的"Cstring.txt"输入文件中 012 本程序能自动跳过0或多个分隔符(分隔符可以为任意的符号,如“:”,“%”或空格等,判断的函数实现见SkipDelimiter函数)。 如:输入文件内容为: 30 31 32 或 303132 得到的都是 012 [cpp]view plain copy 1.#include 2.#include 3.#include 4.#include 5.#include 6.#include 7.#include 8.#include 9.typedef unsigned char uint8; 10.uint8 ConverseOneChar(uint8 ucChar) 11.{ 12. uint8 ucTmp = 0x00;

13. printf("one ucChar= 0x%x\n", (char)ucChar); 14.switch(ucChar) 15. { 16.case'0': 17. ucTmp = 0x00; 18.break; 19.case'1': 20. ucTmp = 0x01; 21.break; 22.case'2': 23. ucTmp = 0x02; 24.break; 25.case'3': 26. ucTmp = 0x03; 27.break; 28.case'4': 29. ucTmp = 0x04; 30.break; 31.case'5': 32. ucTmp = 0x05; 33.break; 34.case'6': 35. ucTmp = 0x06; 36.break; 37.case'7': 38. ucTmp = 0x07; 39.break; 40.case'8': 41. ucTmp = 0x08; 42.break; 43.case'9': 44. ucTmp = 0x09; 45.break; 46.case'a': 47.case'A': 48. ucTmp = 0x0a; 49.break; 50.case'b': 51.case'B': 52. ucTmp = 0x0b; 53.break; 54.case'c': 55.case'C': 56. ucTmp = 0x0c;

(完整版)C语言知识点总结【重点版】

C语言最重要的知识点 总体上必须清楚的: 1)程序结构是三种: 顺序结构、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以二进制的形式. 数据存放的位置就是他的地址. 4)bit是位是指为0 或者1。byte 是指字节, 一个字节= 八个位. 概念常考到的: 1、编译预处理不是C语言的一部分,不占运行时间,不要加分号。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 误的,一定不能出现分号。 3、每个C语言程序中main函数是有且只有一个。 4、在函数中不可以再定义函数。 5、算法:可以没有输入,但是一定要有输出。 第一章C语言的基础知识 第一节、对C语言的基础认识 1、C语言编写的程序称为源程序,又称为编译单位。 2、C语言书写格式是自由的,每行可以写多个语句,可以写多行。 3、一个C语言程序有且只有一个main函数,是程序运行的起点。 第二节、 2、每个C语言程序写完后,都是先编译,后链接,最后运行。(.c---(.obj---(.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。(常考!)(程序编辑-程序编译-程序连接-程序运行) 第三节、标识符 1、标识符(必考内容): 合法的要求是由字母,数字,下划线组成。有其它元素就错了。 并且第一个必须为字母或则是下划线。第一个为数字就错了 预定义标识符:背诵define scanf printf 2 include。记住预定义标识符可以做为用户标识符。 第五节:整数与实数 1)C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理。(考过两次) a、C语言中的八进制规定要以0开头。(数码取值0-7)018的数值是非法的,八进制是没有8的,逢8进1。 b、C语言中的十六进制规定要以0x(X)开头。(数码取值0-9,a-f,A-F) C.十进制没前缀,数码取值0-9 2)小数的合法写法:C语言小数点两边有一个是零的话,可以不用写。小数点必须有 1.0在C语言中可写成1. 0.1在C语言中可以写成.1。 3)实型数据的合法形式: a、2.333e-1 就是合法的,且数据是2.333×10-1。 b、考试口诀:e前e后必有数,e后必为整数。请结合书上的例子。

相关文档
相关文档 最新文档