c语言,int赋值给char

我是这样写的
char c[4];
int i=100;
memcpy(c,i,4);

我就是想吧int赋给char,因为int占4bit 所以我给char也分了4bit
但是总报错,

我想知道 如果互转
我吧int 给char =malloc(4) 然后 我在截取char(4) 赋给int 这样互转
哦 不好意思 我写错了 是占4个byte 不是位
还有 memcpy 里的 参数写饭了...

  可以按照下面代码示意的内容操作,即可完成赋值:

char c[4];
int i=100;
*(int*)c = i;

  也可以使用memcpy,示意代码如下:

memcpy(c,&i,sizeof(i));

  推荐使用第一种方法,这样当要将值回传的时候,只需要按照下面的操作即可

i = *(int*)c;

  灵活使用指针类型转换,可以极大的简化程序代码,这个问题即是一个好例子

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-30
如jackielau1980所说,char是1 byte,int是4 bytes,而不是bit,1 byte = 8 bits

你拷贝的代码就一点问题,memcpy(c, &i, 4);
这样你应该就看出问题了。

==================
反过来也是一样,只要i是用地址就行了,可以成功的追问

:) 谢谢你, 你攒过报文吗, 我的问题 在你帖子上面 你能帮我看看 我这么做对不对吗? 是不是通常 都是这么做的?

追答

哪个帖子?用百度High发地址给我吧

追问

:) 对不起啊 我们公司网速很卡,除了baidu首页 ,其他的都很难打开

我还想问你个 strcpy和memcpy 有什么区别吗?

还有一个问题
char *p
p = "abcde"; 这一句我知道指的常量
p=malloc(6);strcpy(p,"abcde");这是第二句
如果我不打算修改p里的内容, 这两句性能上有区别吗? 哪种更好一点

追答

性能上来说,常量要有优势一些,你的第二句,分配内存,然后拷贝,其实strcpy的第二个参数也是会隐式的分配到常量区的。

strcpy和memcpy的区别就是,一个是按字符串拷贝,遇到'\0'就停止,memcpy则不受这个限制,可以说strcpy是一种特殊的memcpy

追问

非常感谢,
那个strcpy(p,"abc");

这个 常量里的abc 是不是就变成脏数据了, 消灭不了了吧?

有没有什么方法,可以不产生脏数据 就赋值的

还有 我想问你一个问题, 比方 memcpy(m+3,(char *)0xFF,1); 这样报错,
怎样不用临时变量 就可以把0xff 当初一个char 拷给m内存的第3个位置上啊?

追答

1. 常量区的数据确实不是程序员来管理的,但是你的数据一定得有个来源才行,如果你不想产生这些数据的话,那么只能把数据写到文件中,使用的时候从文件读取。这样,整个内存管理过程都是在你的可控范围。
2. memcpy(m+3,(char *)0xFF,1);这句话我得先确认m是个什么类型,假定是个指针,也是要分类型的,不同类型的指针加3之后得到的地址是不一样的,这个你应该明白。然后第二个参数的问题,按照你的写法这就是去拷贝内存中地址为0XFF的内存中的数据,如果不用临时变量的话怕是只能通过memcpy(m + 3, "\xff", 1);这种方式来进行,不过这种单字节的通常直接赋值就可以了,没必要用memcpy吧

本回答被网友采纳
第2个回答  2012-05-30
如果一个char 负数如-1在计算机中代码为1111 1111,那么把他赋值给int 型char c=-1; int b; memset(&b,'\\0',4);//将b的4字节存储单元清零,igmblI追问

==,我没看懂,
清空不是 '\0'这样吗, 你干嘛前面要加一个斜杠啊?
还有你后面的igmbll是什么意思?
如果是-1 存到int里会怎样? 也应该是-1吧 也应该占一个字节吧, char -125 +126不都是一个字节吗, 你后面干嘛特意提一下4字节啊?
感觉你好像 什么都没说完啊

第3个回答  2012-05-30
老大
memcpy(c,i,4);
这样怎么都不对吧

memcpy参数是目标指针,来源指针,数据大小.那个int的是变量又不是指针......
第4个回答  2012-05-30
强制类型转换就行了 char c;
c=(char)i;
就这样可以了,不过输出来的就是100所对应的ASCII码上的字符,也就是字母d;追问

谢谢你, :) 第四条回复里我追问了一个问题, 你方便帮我看一下吗
就是char short int 那个占几个字节的问题

追答

char占一个字节,int是两个或者四个,short int 是要求不要比int所占的字节数多就可以

相似回答