代码之家  ›  专栏  ›  技术社区  ›  kal

获取char*缓冲区中的第一个字节

c c++
  •  6
  • kal  · 技术社区  · 16 年前

    8 回复  |  直到 16 年前
        1
  •  18
  •   Johannes Weiss    16 年前

    只需使用

    char firstByte = buffer[0];
    
        2
  •  13
  •   Salman A    16 年前

    或者这个:

    char firstByte = *buffer;
    

    澄清一下,两者之间没有区别 *buffer buffer[0] *(buffer + 0*sizeof(char)) ,任何编译器都足够聪明,可以用 *(buffer+0) 然后 *缓冲器

        3
  •  5
  •   Luca Matteis    16 年前
    char *buffer = {'h','e','l','l','o','\0'};
    

    或者:

    char *buffer = "hello";
    

    或者:

    char buffer[6] = {'h','e','l','l','o','\0'};
    

    并获取第一个字节:

    char firstChar = buffer[0];
    

    或者:

    char firstChar = *buffer; // since the buffer pointer points to the first element in the array
    
        4
  •  2
  •   Paul Tomblin    16 年前

    如果你决心进行微优化,你应该知道,在这个千年中制造的每个编译器都应该为“c=*buffer”和“c=buffer[0]”生成完全相同的机器代码。

        5
  •  1
  •   Matt Davison    16 年前
    char first = someCharPtr[0];
    

    char first = *someCharPtr;
    
        6
  •  1
  •   Matthew Crumley    16 年前

    为了澄清几个人提到的问题,那就是:

    buffer[0]
    

    等同于

    *(buffer + 0*sizeof(char))
    

    如果你假设这是字面意义上的C代码(即不是伪代码),那么这在技术上是不正确的,尽管编译器正在为你做这件事。

    由于指针算术,当你向指针添加一个整数时,它会自动乘以 sizeof(*pointer)

    *(buffer + 0)
    

    sizeof(char) 如果定义为1,则在这种情况下实际上是等效的。

        7
  •  0
  •   schnaader    16 年前
    char* c_ptr;
    char first_char;
    
    first_char = c_ptr[0];
    
        8
  •  0
  •   spoulson    16 年前

    适用于x86平台。..

    char firstByte;
    
    __asm {
       mov al, [buffer]
       mov [firstByte], al
    }