• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jseanj
V2EX  ›  程序员

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

  •  
  •   jseanj · Oct 14, 2013 · 3522 views
    This topic created in 4678 days ago, the information mentioned may be changed or developed.
    比如在c中,想得到一个int的二进制可以通过itoa,但是这是通过程序计算得到的,我想知道是否有直接读取内存地址上二进制数据的系统接口?

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

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

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

    任何数字都只是数字,当你提到二进制或者十进制的时候,都是在提这个数字的字符串表示,也就是你在顶楼里写的itoa的作用。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3287 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 10:47 · PVG 18:47 · LAX 03:47 · JFK 06:47
    ♥ Do have faith in what you're doing.