我必须调试由其他人编写的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和字节顺序是小端。
答案 0 :(得分: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
此行只是将值数据[0]打印为uint32_t
。 data[0]
为'f'
,ASCII为0x66(十进制为102)。
答案 1 :(得分:1)