日期:2014-05-17  浏览次数:21295 次

int i=100, string s="100"在内存中如何存储
int 100占四个字节,每个字节分别存储了什么;string 100在的四个字节中又分别存储了什么;本人刚接触通讯方面的,发现本质的存储还不了解,希望各大神指点,给些内存、地址什么的方面资料看看
内存 通信 存储

------解决方案--------------------
晕倒,你还是看看C语言吧,C语言或者汇编语言的最基础的入门教程都有这类资料,

int的四个字节分别是00 00 00 64,但次序在不同平台上各有不同,有些是00 00 00 64,有些正好反过来64 00 00 00,这个和通讯是有关的,socket必须考虑字节次序问题,
------解决方案--------------------
字符串就更复杂了,一般来说string "100"在内存中占据6个字节,但在文件中可能是6个字节,也可能是3个字节,字符串会被视为字符的序列,字符串存储的是字符编码,所以存储内容是什么,要看使用什么样的字符编码,一般来说c#内存中使用unicode编码,在文件中通常用utf8编码其实也是unicode的一种形式,
------解决方案--------------------
"100"十六进制存储的四位“03 31 30 30”;

你用你的电脑上的科学计算机算一下 十六进制31 对应是十进制49 ASSII 49对应的是1 30对应的十进制是48 ASSII对应的是 0 
------解决方案--------------------
引用:
Quote: 引用:

"100"十六进制存储的四位“03 31 30 30”;

你用你的电脑上的科学计算机算一下 十六进制31 对应是十进制49 ASSII 49对应的是1 30对应的十进制是48 ASSII对应的是 0 
哦,那就是说它先把字符‘0’转换成十进制=48,然后再转换成十六进制进行存储,所以结果是30


计算机不认十进制等其他进制,只认二进制。
计算机针对你输入的字符,比对编码表,直接用二进制存储。只不能展现给你看的时候,为了方便,用十六进制的方式给你看。
------解决方案--------------------
http://wenku.baidu.com/view/5b9f32a9d1f34693daef3e71.html 
这个是ASSIC表里面对应的字符我刚才那样写 就是因为你看的是十进制的ASSIC 所以想告诉你十六进制 31 对应十进制 49 对应的字符是 1 你看下我发的连接表 都可以找到的!
------解决方案--------------------
帮顶
不知道为神马让我想起了以前一个很纠结的问题 i++和++i.
------解决方案--------------------
数据在机器里都是以二进制存储的,所谓的十六进制,只是为了显示给人类看的而已。机器里根本就没有十六进制,而是一直都是二进制滴。。。


------解决方案--------------------
引用:
 嗯,所谓的计算机语言(二进制),不过我是说存储的时候存为16进制;下面图片是十六进制存储吧


你那个工具,应该还有2进制、8进制、10进制模式。