免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: daiyihang
打印 上一主题 下一主题

在C 中如何定义一个 1 byte 的整形? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-03-23 17:36 |只看该作者
之所以要1byte 的 int
是因为如果是 4 byte 的int

结果 就是

$ od -x file2

0200 0000 0000 0000 0200 0000 0000 0000 0900 0000 0000 0000 0a00 0000 0000 0000

论坛徽章:
0
12 [报告]
发表于 2007-03-23 17:46 |只看该作者
原帖由 daiyihang 于 2007-3-23 17:36 发表
之所以要1byte 的 int
是因为如果是 4 byte 的int

结果 就是

$ od -x file2

0200 0000 0000 0000 0200 0000 0000 0000 0900 0000 0000 0000 0a00 0000 0000 0000



你去写文件, 你自己用个char的buf还能有问题嘛. 自己试试...用write吧..直接玩玩
下班...

论坛徽章:
0
13 [报告]
发表于 2007-03-23 17:51 |只看该作者

回复 11楼 daiyihang 的帖子

.

多余的字节,将其削去不用就可以了。

.

论坛徽章:
0
14 [报告]
发表于 2007-03-23 17:56 |只看该作者
原帖由 Edengundam 于 2007-3-23 17:46 发表



你去写文件, 你自己用个char的buf还能有问题嘛. 自己试试...用write吧..直接玩玩
下班...

用char buf 写的就是 0x32之类的

论坛徽章:
0
15 [报告]
发表于 2007-03-23 17:57 |只看该作者
原帖由 bGFuZ3Vl 于 2007-3-23 17:51 发表
.

多余的字节,将其削去不用就可以了。

.



HOW?

论坛徽章:
0
16 [报告]
发表于 2007-03-23 18:07 |只看该作者
.

Pseudocode:

  1. p := 0x000000aa;
  2. q := p & (char)0xff;
复制代码


其实 char 类型系列也能用。

.

论坛徽章:
0
17 [报告]
发表于 2007-03-23 18:25 |只看该作者
原帖由 bGFuZ3Vl 于 2007-3-23 18:07 发表
.

Pseudocode:

  1. p := 0x000000aa;
  2. q := p & (char)0xff;
复制代码


其实 char 类型系列也能用。

.

多谢了

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
18 [报告]
发表于 2007-03-23 18:29 |只看该作者
没听明白你想做什么,如果没用fprintf() 怎么会把数字2 写成 字符'2'。

  1. [root@test9 bit]# cat test.c
  2. #include <stdio.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>

  6. int main()
  7. {
  8.         int fd;
  9.         char a[4] = { 2, 2, 9, 10};

  10.         fd = open("file", O_CREAT|O_RDWR);
  11.         write(fd, a, 4);
  12. }
  13. [root@test9 bit]# tcc -run test.c
  14. [root@test9 bit]# od -t x1 file
  15. 0000000 02 02 09 0a
  16. 0000004
  17. [root@test9 bit]#
复制代码



--------------------------------------------------------
还有一点不明白:2 2 9 存的是ascii码,可是10却存成40。 到底是 2 2 9 10 还是 '2' '2' '9' '@'
或者是你想把 '2' '2' '9' '@' 转换成 0x02 0x02 0x09 0x0a? 那样就是每个字节减去0x30...

[ 本帖最后由 yjh777 于 2007-3-23 18:47 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2007-03-25 10:02 |只看该作者
原帖由 langue 于 2007-3-23 16:27 发表
.

参看 5 楼的帖(加分的那个)

如果在 32 位的系统上使用 C 语言,那么 int 常常是 4 个字节的;16 位的系统上 int 常常占用 2 个字节;8 位的呢?聪明的你应该已经猜到了吧,一个字节。这就对了。

.

那4位机呢?我过去还搞过1位机,那按你推想,int是1位了?
在8位机上,绝大多数C编译器的int还是16位。因为,8位int太短,不实用。我用过6502、8080、Z80、6800等8位机,int全是16位的。
说绝大多数,是因为也有单机片是8位的。

评分

参与人数 1可用积分 +2 收起 理由
langue + 2 精品文章

查看全部评分

论坛徽章:
0
20 [报告]
发表于 2007-03-25 10:10 |只看该作者
在C里,char、short、int、long型统称为integer型。就是说,C是把字符完全当作整数处理的。你不用
unsigned char或signed char,还打算用什么呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP