0

我必须调试别人编写的 C++ 代码。我在位移方面的经验很少,因此这个问题。这是相同代码的修改(值和与位移无关的代码)版本:

void get16Bits1(const char * data)
{
    cout<<(((uint32_t)((const uint8_t *)(data))[1]) << 8)<<endl;
    cout<<(uint32_t)((const uint8_t *)(data))[0]<<endl;
}

int main(){
   const char * data = "francesmccurdey\0";
   get16Bits1(data);
   return 0;

}

打印出来:

29184
102

我没有得到的部分是get16Bits1()函数,转换为uint32_t改变输出。当我有这个时:

void get16Bits1(const char * data)
    {
        cout<<((const uint8_t *)(data))[1]<<endl;
        cout<<((const uint8_t *)(data))[0]<<endl;
    }

output is:
r
f

我在 linux 架构上使用 gcc 编译器进行编译:x86_64 和字节顺序是小端。

4

2 回答 2

1

cout<<(((uint32_t)((const uint8_t *)(data))[1]) << 8)<<endl;

data[1]'r'ASCII 中的 0x72。

0x72 << 8 = 0x7200 = 29184

对于下一行get16Bits1()cout<<(uint32_t)((const uint8_t *)(data))[0]<<endl

此行仅将值 data[0] 打印为uint32_t. data[0]'f'ASCII 中的 0x66(十进制中的 102)。

于 2013-04-23T20:01:54.320 回答
1

以十六进制查看输出是否有帮助?

7200
66
于 2013-04-23T20:02:01.030 回答