ここで問題が発生しました。整数を入力し、整数ポインターをキャストして、ポインターと出力するバイト数print_bytes
を受け入れる関数に送信しました。char*
各バイトのアドレスと数値を 16 進数で出力してみました。ただし、250 の場合、o/p は最初のバイトが fa で、次の 3 バイトがゼロである必要がありましたが、代わりに最初のバイトが fffffffa と出力されます。
#include<stdio.h>
using namespace std;
void print_bytes(char* ptr,int len)
{
for(int i=0;i<len;i++)
{
printf("%p %x\n",ptr+i,*(ptr+i));
}
}
int main()
{
int a=250;
print_bytes((char*)&a,4);
return 0;
}
しかし、ポインターの型を変更するunsigned char*
と、正しい出力が得られます。つまり、MSB が 1 でchar*
あると、出力がうまくいかないということです。または、何か不足していますか?