请教一个问题:在程序中怎样得到一个变量的二进制数据

2013-10-14 16:27:23 +08:00
 jseanj
比如在c中,想得到一个int的二进制可以通过itoa,但是这是通过程序计算得到的,我想知道是否有直接读取内存地址上二进制数据的系统接口?

ps:通过gdb的x命令可以查看内存数据,我觉得这是最接近底层的了。
2894 次点击
所在节点    程序员
16 条回复
9hills
2013-10-14 16:46:18 +08:00
itoa不是返回二进制。。它是把二进制转换为字符串给你看得
Kabie
2013-10-14 16:50:33 +08:00
C获取指针然后就随便玩了。。。当然你得知道存储方式。。。其他语言估计就难了……
66450146
2013-10-14 16:51:53 +08:00
直接使用这个变量就是使用它的二进制数据啊。。。。
jseanj
2013-10-14 17:05:46 +08:00
@9hills 是的,它是将二进制数据存放在字符数组中返回的,但是我想看的是实际存储的二进制,也就是一个bit的值,而非一个byte的值
jseanj
2013-10-14 17:08:18 +08:00
@Kabie
@66450146
比如int,程序显示给我们的是以4个字节为单位来显示的,而不是以32个bit为单位来显示的,我想知道是否有接口可以取出32个bit,而非用程序计算的方式算出来
wjchen
2013-10-14 17:11:53 +08:00
struct a
{
int a1 :1;
int a2:1;
.....
int a32:1;
};
这样?将int用memcpy拷贝到结构体。
9hills
2013-10-14 17:20:39 +08:00
@jseanj Google C 位运算

C的位运算已经是最底层了,没法再低
jseanj
2013-10-14 17:21:33 +08:00
@wjchen memcpy不是拷贝起始位置的n个字节吗?不是n个bit位
Kabie
2013-10-14 17:23:02 +08:00
@wjchen 不用复制……直接类型转换就行了……
jseanj
2013-10-14 17:23:43 +08:00
@9hills 那看来是真没有了,除非汇编了
ddaii
2013-10-14 17:29:53 +08:00
@jseanj 在c语言中定义的各种类型其实都只是定义一块内存区域的操作方式而已,所以无论是int,char,float,double,你需要用一个指针就可以把它读取出来了,这并不需要什么系统接口。
Golevka
2013-10-14 17:30:58 +08:00
@jseanj 啊哈哈哈哈哈哈哈你真的知道自己究竟想要什么吗?

另外注意一下如果你在userspace下那么你能摸到的大部分地址都不是等值映射的, 所以如果你想访问真正的物理地址那么还得找别的办法=w=
jseanj
2013-10-14 17:35:56 +08:00
@Golevka 我想要的就是看有没有接口能直接读取二进制数据
jseanj
2013-10-14 17:40:15 +08:00
@ddaii 确实如你所说,每种类型其实就是定义数据的方式罢了,01序列通过定义方式的不同显示的也不一样。即使程序具备这种接口也是没什么必要的。
jedyu
2013-10-14 17:53:32 +08:00
自己写个函数,遍历每一位&一下
msg7086
2013-10-15 02:09:35 +08:00
@jseanj 所以其实你完全不知道你到底要什么。

任何数字都只是数字,当你提到二进制或者十进制的时候,都是在提这个数字的字符串表示,也就是你在顶楼里写的itoa的作用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/85558

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX