极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10071|回复: 3

一个24CXX读写unsigned long的函数.请教个问题.

[复制链接]
发表于 2015-10-5 18:15:46 | 显示全部楼层 |阅读模式
自己用的,直接写入或读取unsigned long型数据.
第一个参数传递变量的指针地址,第二个参数是读写的开始地址

char应该是占用一个字节的空间也就是就大是255
但实际用的时候不加(byte)转成字节型数据操作完成后发现在数据不正确.
转成unsigned int用println输出发现数据大于255.达到了两个字节.想请教各位这是怎么回事.

  1. //写入无符号长整型数据
  2. void WriteUL(unsigned long *date,int add){
  3.         char buffer[4];
  4.         buffer[3]=*date&0x000000FF;
  5.     buffer[2]=(*date&0x0000FF00)>>8;
  6.     buffer[1]=(*date&0x00FF0000)>>16;
  7.     buffer[0]=(*date&0xFF000000)>>24;
  8.     AT24C32.WriteMem(add,buffer,4);
  9. }
  10. //读出无符号长整型数据
  11. void ReadUL(unsigned long *date,int add){
  12.         char buffer[4];//缓冲数组
  13.         AT24C32.ReadMem(0, buffer, 4); //读出数据到缓冲数组
  14.         *date=(byte)buffer[0];
  15.         *date=*date<<8;
  16.         *date|=(byte)buffer[1];
  17.         *date=*date<<8;
  18.         *date|=(byte)buffer[2];
  19.         *date=*date<<8;
  20.         *date|=(byte)buffer[3];
  21. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-10-5 19:55:19 | 显示全部楼层
用强制类型转换
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-5 23:02:57 | 显示全部楼层
suoma 发表于 2015-10-5 19:55
用强制类型转换

这个我知道.问题已经解决了.只是不明白一个字节输出后会大于一个字节.
回复 支持 反对

使用道具 举报

发表于 2015-10-6 19:44:52 | 显示全部楼层
fengz41 发表于 2015-10-5 23:02
这个我知道.问题已经解决了.只是不明白一个字节输出后会大于一个字节.

溢出或类型不匹配
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 16:06 , Processed in 0.085563 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表