每一个可以努力的日子,都是一份厚礼。
C
C/C++反序输出字符串总结
2011 3月 21st
2年前去T公司面试,面试官给了我一张纸一支笔,说写个程序吧,输入一个字符串然后反序输出。我问输入输出是用函数参数呢还是系统I/O,面试官说随你便,写完了说说各有什么优缺点吧。当时我大三,没有参加过ACM没有实验室经历除了课程设计也没写过什么程序,完全小白。当然至今也仍然是菜鸟一只,不堪回首啊。
方法一:据说有库函数strrev()啊 更多 >
RSA读取密钥——使用openssl编程
2011 1月 4th
RSA是基于数论中大素数的乘积难分解理论上的非对称加密法。在此密码术中,使用公钥(public key)和私钥(private key)两个不同的密钥:公钥用于加密,它是向所有人公开的;私钥用于解密,只有密文的接收者持有。
举例:小红希望安全地发送一条消息给小明,消息明文为m,小明的公钥为K+,小明的私钥为K-。通信过程为,小红使用K+加密m,成为密文K+(m),传送给小明,小明收到后使用K-解密这个密文得到原始消息明文,即m = K-(K+(m))。
具体的密钥生成算法如下。随机选择两个大素数p和q(比如每个都是1024 bit),计算n = pq, n’ = (p-1)(q-1). 选择一个e (e小于n) 与n’互质。计算d使得ed = 1 mod n’.则公钥为(n, e),私钥为(n, d). 注意p和q都应该保密。
加密过程为c = m^e mod n
解密过程为m = c^d mod n
以上为原理简介。下面是openssl API编程应用读取密钥文件的示例源代码: 更多 >
struct类型的全局变量初始化
2010 11月 7th
今天在实现一个队列时犯了一个很傻逼的错误。一个定义为struct类型的全局变量,我在想定义完后立刻初始化,就写成类似下面这种样子:
struct { int i; int j; } test; test.i = 1; test.j = 1; |
结果gcc编译器报错,“initializer element is not constant”
在我的实际情况中,test的成员变量i和j也为strcut类型,报的错为“struct expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘”
真神奇,int char类型都可以直接初始化,struct类型就不行。
最后在http://bbs.chinaunix.net/thread-1285396-1-1.html的4楼找到了说法。全局变量在编译时就必须确定其值,故C有静态存储区数据必须用常量初始化的规定。
其实很简单, 在全局空间定义struct test,然后再写一个初始化函数对test进行赋值就可以了。
Socket编程中用send发送结构体
2009 8月 20th
本文转载自http://tech.ddvip.com/2008-10/122543769687623.html
最近在开发一个Linux下的聊天软件,好久没有做C语言的开发了,感觉到很多东西已经生疏了,这下又碰到用Socket传递结构体的问题,google了一下,发现也有不少朋友遇到同样的问题,所以就打算写出自己的解决办法,跟大家分享。
Socket中的send函数可以发送字符串,但不能直接发送结构体,因此在发送端先把结构体转成字符串,然后用send发送,在接收端recv字符串,再转换成原先的结构体,这个就是解决问题的主要思路,实现中要注意的问题在下文阐述。
为了客户端之间能够互相通信,实现私聊,我采用服务器转发的方式,因此用户发送的每条消息中除了消息主体外,还必须包含有发送者、接收者ID等信息,如此采用结构体便是最佳的办法了。我定义的结构体如下:
struct send_info { char info_from[20]; //发送者ID char info_to[20]; //接收者ID int info_length; //发送的消息主体的长度 char info_content[1024]; //消息主体 }; |