佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

12
返回列表 发新帖
楼主: 1234_4321

Binary File的疑问

[复制链接]
发表于 2-12-2009 12:01 PM | 显示全部楼层
其实BINARY FILE和MACHINE CODE没直接的关连.....
LEVEL FROM LOW TO HIGH

HARDWARE
----------------
OS
FILE SYSTEM
一大堆的XXXXX
----------------
HUMAN

同样的HARDWARE....不同的FILE SYSTEM也有不同的INTERPRETATION... WINDOW(SMALL ENDIAN), UNIX/LINUX/UBUNTU/SPARK(BIG ENDIAN)
回复

使用道具 举报


ADVERTISEMENT

发表于 2-12-2009 10:22 PM | 显示全部楼层

回复 19# 1234_4321 的帖子

以上只是比喻, 说的是, executable 于 一般 binary file 在program 里的分别。 不是说, executable 是 machine code。

就如你说说的, machine code 是 indipendent 的。一个 machine instruction 力如何分别, 那个是 data, 那个是地址, 那个是 instruction, 全靠 CPU 如何来定义。 久好比考卷的例子一般。 别搞错了。

同样的, 为什么 word 明白 doc 的file? , 因为word 懂得doc 力, 每一个符号的意思, 也许 00111111100010101 代表 page break, 也许11000111010101 代表是 font red color, 这些全靠那个软件如何来解释。

executable 也是一样, executable 力有一定的格式, OS 会根据这个格式来理解, 然后钻换为 machine instruction ( 你可以这样理解, 不过实际上的过程不是如此简单)
回复

使用道具 举报

发表于 2-12-2009 10:28 PM | 显示全部楼层

回复 19# 1234_4321 的帖子

他们唯一的同点是就是, binary file, 于 cpu instruction 都可以用 binary 来表达。

好比说, 马来文, 于英文都用 alphabert, 同样是 abc , 在 英文里 air 是”空气“, 但是你若吧 air 当成马来文看, air 就成了 “水”。

同样的, 我们解释 111 是 7, 但是 word 可能认为是 font = arial, 而 msn 可能认为是 connected 等等。

这样解释会不会比较容易明白?
回复

使用道具 举报

发表于 3-12-2009 12:44 PM | 显示全部楼层
原帖由 onlylonly 于 2-12-2009 10:28 PM 发表
他们唯一的同点是就是, binary file, 于 cpu instruction 都可以用 binary 来表达。

好比说, 马来文, 于英文都用 alphabert, 同样是 abc , 在 英文里 air 是”空气“, 但是你若吧 air 当成马来文看, air 就 ...

他已经被我弄到很乱air了
回复

使用道具 举报

 楼主| 发表于 3-12-2009 03:57 PM | 显示全部楼层
原帖由 megablue 于 3-12-2009 12:44 PM 发表

他已经被我弄到很乱air了

真了解我

在消化ing
回复

使用道具 举报

发表于 4-12-2009 09:52 AM | 显示全部楼层
原帖由 aquamax 于 2009-12-2 12:01 PM 发表
同样的HARDWARE....不同的FILE SYSTEM也有不同的INTERPRETATION... WINDOW(SMALL ENDIAN), UNIX/LINUX/UBUNTU/SPARK(BIG ENDIAN)


拿 OS 來作 Big/Little Endian 區別,不妥當吧。

x86 ---> Little Endian
PPC, SPARC, Itanium, ARM, MIPS  等等 --> Big Endian (雖然現在大部分都可以大小 Endian 互換)
回复

使用道具 举报

Follow Us
发表于 4-12-2009 10:05 AM | 显示全部楼层
Binary files are usually thought of as being a sequence of bytes, which means the binary digits (bits) are grouped in eights. Binary files typically contain bytes that are intended to be interpreted as something other than text characters. Compiled computer programs are typical examples; indeed, compiled applications (object files) are sometimes referred to, particularly by programmers, as binaries. But binary files can also contain images, sounds, compressed versions of other files, etc. — in short, any type of file content whatsoever.

Some binary files contain headers, blocks of metadata used by a computer program to interpret the data in the file. For example, a GIF file can contain multiple images, and headers are used to identify and describe each block of image data. If a binary file does not contain any headers, it may be called a flat binary file.


http://en.wikipedia.org/wiki/Binary_file
回复

使用道具 举报

发表于 4-12-2009 11:51 AM | 显示全部楼层
原帖由 1234_4321 于 3-12-2009 03:57 PM 发表

真了解我

在消化ing

其实你的问题很好下...
很多所谓的senior programmer也搞不清楚
回复

使用道具 举报


ADVERTISEMENT

发表于 4-12-2009 10:53 PM | 显示全部楼层
还是不太明白
如果一个OS支持两种完全不兼容的机器语言,是否代表着其实是有两个不同机器语言编译的OS版本,而且在机器上编译PE只能编译成只有他自己能执行的PE?

另外有个情况不知道我理解的对不对
假设我写的本地程序读写这样的binary file,前面是一个int n,后面是n个int
在little-endian上生成的这个binary file放到big-endian上读取会得到错误结果
那么为了解决问题,我在binary file头部加多个int v, v=0x1234,如果我读取
到0x3412代表我后面读int必须swap就可以做到源码兼容
(是否还有其他方法呢?不用定义一个常数v在最前面)
如果我用java写的,不需要同样的操作的原因是因为不同平台生成档案一样
回复

使用道具 举报

发表于 5-12-2009 05:08 PM | 显示全部楼层
本帖最后由 archiles 于 5-12-2009 05:13 PM 编辑
还是不太明白
如果一个OS支持两种完全不兼容的机器语言,是否代表着其实是有两个不同机器语言编译的OS版本 ...
cristiano~7 发表于 4-12-2009 10:53 PM



首先,你必须确定你的int 占几个bytes,有些系统不一定是四个bytes。。
二,你要知道你档案里每个 record 的length, 你才能正确的跟它排过。 你可以设置 一致的header length,然后从header 里面可以拿payload 的length。

这样你的parser/reader 再读取这个binary file 时就可以 先读header,知道length 多少,再读payload。。
STDF 的格式大概就是这样。
至于,该排big 还时small endian, 你可以先detect cpu 的种类。再进行排列。
回复

使用道具 举报

 楼主| 发表于 5-12-2009 09:08 PM | 显示全部楼层
其实你的问题很好下...
很多所谓的senior programmer也搞不清楚
megablue 发表于 4-12-2009 11:51 AM



    我以后不想做programmer,还有什么工作好做?
programmer薪水不高又要天天对着电脑
回复

使用道具 举报

 楼主| 发表于 5-12-2009 09:09 PM | 显示全部楼层
本帖最后由 1234_4321 于 5-12-2009 09:35 PM 编辑

对了,想问问。。。

我们的英文有ascii这个standard来让binary代表特定的号码。。
那中文呢?日文呢??

还有还有。。
好奇下。。
"ABC"对我们来说是text....
但。。。。
这些ABC以前人家是如何输入computer的呢?
把它们当做graphic scan进电脑去?
回复

使用道具 举报

发表于 8-12-2009 07:49 PM | 显示全部楼层
中文,日文...是用EXTENTED ASCII....就是第一个BYTE>127....
然后用CODE PAGE来DECODE...通常是CHINESE,JAPAN,KOREA字
WIKI有详细的,我就不重复了....
http://en.wikipedia.org/wiki/Extended_ASCII

当然现在都用UNICODE了....
回复

使用道具 举报

 楼主| 发表于 8-12-2009 10:18 PM | 显示全部楼层
那font是如何输入电脑的呢?
用scan进去吗?

还有extended ascii是过了127开始?
回复

使用道具 举报

发表于 9-12-2009 10:54 AM | 显示全部楼层
font.....简单来讲就是GRAPHICS(FORMAT当然和JPEG之类的不同)而已....
复杂的....要专业的来解释.....
http://www.fonts.com/AboutFonts/Articles/GlyphsCharacters/

FONT不只是A-Z,0-9...还有表点符号...LATIN,CJK.....
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 30-11-2025 06:59 PM , Processed in 0.126304 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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