上周工作结束,来到斯凯网络也将近半个月来。 没有新人的感念,最多的是将自己当作一个战士。

废话不多说,直接入正题,在没有仔细考虑问题之前我们总会 觉得:这尼玛的有毛线难度啊,不就是一个 int 转为char吗,直接把int 转化成string 然后打散不久可以了啊。  这个方案真的可以吗??

我们若再仔细思考下,比如说将 1 转化为 “1”,12 转化为 “12”, 这样就可以了吗?

但是我要问一个问题,这样用系统函数转化过程是很方便很简单,但是有谁知道转化过程中到底做了什么呢,假如要你自己写你会考虑到哪些呢?  对于一个C# 程序员来说,其实比较悲哀的一件事情是:我们一开始的固定思维是:int  转string 不就是一个 int a; a.toString() 的事情吗! 还有什么啊。。。压根没东西啊!  (本人以前也是开发C#的 哈哈!) 。

在这里我也深深的体会到C 的重要,以及为什么说C 的门槛高,而C#的门槛低。(本人自从学习objective-c之后也温习了不少C 知识唷 哈哈)

答案很简单:做同样一件事情理解的深度是完全不一样的。

若是C 开发者则会反问C#:"啊?String类型在我们这里压根没有啊。再怎么说 string类型也无非是 char 的集合啊。所以将string 拆分开来也无非是 char。 因此对上面提出的12 转化为 ’12’  我就有个疑问:一个12 整数为什么要两个char? 若是三位数呢,则需要三个char?但是有一个很严重的问题是你有没有考虑过:在内存中 一个int 是需要4个字节,而一个char 只需要一个! 另外一个很重要的感念就是,在char 字符串家族中 他们是满足ASCII 码规范的。因此我们刚才提到的 ’1‘ 压根在内存结构中和 int 1 是完全不同的。"

针对上面的种种疑问,所以我们把问题也稍微理清下把问题描述理解为:”在内存结构不变的情况下,怎样将int 数据存储在char中!“

先列出 int 1内存数据:0x00000001;(注意:char‘1’ 内存数据是:00110001--0x31)

所以我们可以将一个int 类型拆分4个char ;当然也就是:char[0] -0x00;char[1]-0x00;char[2]-0x00;char[3]-0x01;

哦,到这 为止,我们终于弄明白了!原来是这样啊,但是怎么样实现呢? 在程序的世界里要深刻理解一件事情就是:再我们逻辑上看起来很简单的事情,而在计算机世界都是不可想像的。。。。。

呵呵,代码如下:

@define BYTELENGTH 8;//8 bit 为一个字节

-(void) int2BytesWithValue:(int) value withByteLength: (int) byteLength withResult:(char*) result

{

int shiftCount=0;

for (int i=0; i<byteLength; ++i) {

shiftCount=(byteLength-1-i)*BYTELENGTH;

result[i]= (char)((value&(0x000000ff<<shiftCount))>>shiftCount);//注意 这里0x000000ff, 必须的不然结果可能会不一致

}

}

//同样这里我也写出将 char* 反转化为int 类型吧。希望不要将C# 高级的思想所钝化。

-(int) bytes2IntWithValue:(char*) bytes withByteLength:(int) byteLength

{

int result=0;

//   NSLog(@"int Length:%lu",  sizeof(int));

for (int i=0; i<byteLength; ++i) {

//这里若不 同或&0x000000ff 会出现意想不到的结果

int temp=(int)((bytes[i]&0x000000ff)<<((byteLength-1-i)*BYTELENGTH));

result|= temp;

}

return result;

}

到此为止我才会说有所思考的说:“嗯, 这就对了!这是我想要的。。。。原来我以前一直不知道啊!还是谦虚点好啊!”;

char 数组和 int 之间转化的更多相关文章

  1. byte数组和int之间相互转化的方法

    Java中byte数组和int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送者接收的数据都是byte数组,但是int类型是4个byte组成的,如何把一个整形in ...

  2. byte[]数组和int之间的转换

    这里简单记录下两种转换方式: 第一种: 1.int与byte[]之间的转换(类似的byte short,long型) /** * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高 ...

  3. Java 中 byte、byte 数组和 int、long 之间的转换

    Java 中 byte 和 int 之间的转换源码: //byte 与 int 的相互转换 public static byte intToByte(int x) { return (byte) x; ...

  4. java中byte,byte[]和int之间的转换

    1>byte类型转换为,直接隐式转换,适用于要求保持数值不变,例如要求进行数值计算 如 byte b=0x01; int i=b; 2>另一种是要求保持最低字节中各个位不变,3个高字节全部 ...

  5. byte[] 数组和字符串的转换,与byte[] 数组和int类型的之间的转化

    我们先来看看byte bool  int ushort  等的定义 首先时byte[]数组与string之间的转换 string 转换位byte[] 数组 string str = "1-1 ...

  6. string,char*,int 之间的转化

    c++中经常遇到string,char*,int之间的相互转化,今天就来整理一下. 以下是转载并修改的内容: 以下是常用的几种类型互相之间的转换 string 转 int先转换为char*,再使用at ...

  7. java字符数组char[]和字符串String之间的转换

    java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...

  8. 把int放在一个char数组里(用于处理每一位数字)

    sprintf(): #include <stdio.h> void put_int_with_space(int v) {     char str[50];    //定义一个足够大的 ...

  9. 个人理解的int数组和char数组

    char数组中不论是一维还是二维的,在程序执行时每一块的分离依据都是以提供的起始地址到'\0'为一个处理的字符串.所以关于char[]的函数都是只提供相应起始地址作为形参就可以. char[]互相交换 ...

随机推荐

  1. u盘安装ubuntu server 14.04 以及No CD-ROM drive was detected 错误

    u盘安装ubuntu server 14.04 1:下载ubuntu server14的 iso镜像文件 2:下载 UltraISO U盘镜像制作工具 : 3:使用Ultra iOS 将下载好的 is ...

  2. 关于MySQL回滚机制

    在事务中,每个正确的原子操作都会被顺序执行,直到遇到错误的原子操作,此时事务会将之前的操作进行回滚.回滚的意思是如果之前是插入操作,那么会执行删 除插入的记录,如果之前是update操作,也会执行up ...

  3. javascript 盒子模型

    oDiv.clientWidth--->width+左右padding oDiv.clientHeight--->height+上下padding oDiv.clientTop---> ...

  4. NodeJS几个值得学习的开源框架

    1.Primus Primus,是Transformer的创造者,并且也被称为通用包装器实时框架.Primus里包含了大量的用于Node.js的实时框架,并 且它们都拥有各种不同的实时功能.此外,Pr ...

  5. nodeschool.io 6

    ~~ MAKE IT MODULAR ~~ This problem is the same as the previous but introduces the concept ofmodules. ...

  6. .net 时间戳和日期互转 【转】http://www.cnblogs.com/zhuiyi/p/5307540.html

    .net 时间戳和日期互转 1.时间戳转日期public static DateTime IntToDateTime(int timestamp){ return TimeZone.CurrentTi ...

  7. soapUI参数

    点击File->New Rest Project,填入要测试的URI,确定进入编辑界面: 调整请求方式,添加请求参数,设置参数风格,这里要说一下:style有五种,QUERY是默认常用:TEMP ...

  8. Mysql复制表格

    1.复制表结构及数据到新表 CREATE TABLE 新表 as SELECT * FROM 旧表 不过这种方法的一个最不好的地方就是新表中没有了旧表的primary key.Extra(auto_i ...

  9. PHP换行符详解 PHP_EOL,<br />

    1.PHP_EOL:用于文本的换行符,经常用于日志文件记录.可以解决: 在windows中\r\n是换行在Mac中\r是换行在Liunx中\n是换行 不统一的问题. 2. <br /> : ...

  10. Uploadify使用

    Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中的使用,您也可以点击下面的链接进行演示 ...