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

时间:2009-02-11 20:15:46

标签: c++ c

我有一个char *缓冲区,我有兴趣查看char *缓冲区中的第一个字节,最佳方法是什么。

编辑:根据负面投票,我可能想解释为什么这个问题,我知道方法,但在代码库,我一直在寻找获得第一个字节的人做各种疯狂的事情,如做副本缓冲区,将其复制到流然后执行get。

8 个答案:

答案 0 :(得分:18)

只需使用

char firstByte = buffer[0];

答案 1 :(得分:13)

或者这个:

char firstByte = *buffer;

为了澄清,*bufferbuffer[0]之间没有区别,因为后者实际上只是*(buffer + 0*sizeof(char))的简写,并且任何编译器都足够聪明以用{替换它' {1}}然后*(buffer+0)。因此,在您使用它的上下文中,选择实际上是最清楚的,而不是每个选项的效率。

答案 2 :(得分:5)

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

char first = someCharPtr[0];

char first = *someCharPtr;

答案 5 :(得分:1)

正如对几个人所提到的那样的澄清 - 那就是:

buffer[0]

相当于

*(buffer + 0*sizeof(char))

如果你假设它是字面上的C代码(即非伪代码),那在技术上并不正确,尽管编译器正在为你做这些。

由于指针运算,当你向指针添加一个整数时,它会自动乘以sizeof(*pointer),所以它应该是:

*(buffer + 0)

虽然,因为sizeof(char)被定义为1,所以在这种情况下它实际上是等效的。

答案 6 :(得分:0)

char* c_ptr;
char first_char;

first_char = c_ptr[0];

答案 7 :(得分:0)

适用于x86平台...

char firstByte;

__asm {
   mov al, [buffer]
   mov [firstByte], al
}
相关问题