当前位置: 技术问答>linux和unix
C语言char数值的转换函数
来源: 互联网 发布时间:2017-03-01
本文导语: 我想实现下面的功能: unsigned char ucTest[5] = {''}; unsigned int ui; ucTest[0] = 0x01; ucTest[1] = 0x02; ucTest[2] = 0x03; ucTest[3] = 0x04; 我想得到 ui = 0x01020304,也就是连续的4个字节的char数值组成一个int的数值。有现成的函数...
我想实现下面的功能:
unsigned char ucTest[5] = {''};
unsigned int ui;
ucTest[0] = 0x01;
ucTest[1] = 0x02;
ucTest[2] = 0x03;
ucTest[3] = 0x04;
我想得到 ui = 0x01020304,也就是连续的4个字节的char数值组成一个int的数值。有现成的函数吗
如果没有,要是自己写转换函数,能提供一下思路吗?
(难道非得用一个bit一个bit的数值加(2^n)吗,但是C里面没有现成的求幂运算函数,所以暂时没有好的思路)
unsigned char ucTest[5] = {''};
unsigned int ui;
ucTest[0] = 0x01;
ucTest[1] = 0x02;
ucTest[2] = 0x03;
ucTest[3] = 0x04;
我想得到 ui = 0x01020304,也就是连续的4个字节的char数值组成一个int的数值。有现成的函数吗
如果没有,要是自己写转换函数,能提供一下思路吗?
(难道非得用一个bit一个bit的数值加(2^n)吗,但是C里面没有现成的求幂运算函数,所以暂时没有好的思路)
|
写的有点小错误哈,,宏定义里,要对ui取地址.
所以会出现core dump
如下:
#include
#define CHAR2INT(str,ui) {
*(unsigned char*)&ui = str[3];
*((unsigned char*)&ui + 1) = str[2];
*((unsigned char*)&ui + 2) = str[1];
*((unsigned char*)&ui + 3) = str[0];}
int main(void)
{
unsigned char ucTest[5];
unsigned int ui;
ucTest[0] = 0x01;
ucTest[1] = 0x02;
ucTest[2] = 0x03;
ucTest[3] = 0x04;
CHAR2INT(ucTest , ui);
printf("ui = %xn" , ui);
return 0;
}
所以会出现core dump
如下:
#include
#define CHAR2INT(str,ui) {
*(unsigned char*)&ui = str[3];
*((unsigned char*)&ui + 1) = str[2];
*((unsigned char*)&ui + 2) = str[1];
*((unsigned char*)&ui + 3) = str[0];}
int main(void)
{
unsigned char ucTest[5];
unsigned int ui;
ucTest[0] = 0x01;
ucTest[1] = 0x02;
ucTest[2] = 0x03;
ucTest[3] = 0x04;
CHAR2INT(ucTest , ui);
printf("ui = %xn" , ui);
return 0;
}
|
memcpy(&ui, ucTest, sizeof(ui));
ui=ntohl(ui);
ui=ntohl(ui);