【发布时间】:2014-06-03 15:18:24
【问题描述】:
我想知道是否可以使用 char* 值来访问 int 值的每个字节...所以我尝试使用指针值来访问 int 的第一个字节并使用 for 循环来访问另一个整数字节...
代码如下:
int char_to_bin(char* d){
int p= (int)*d;
int i=0,number=0;
if (p>=0){
do{
number+= (p%2)*(pow(10,i));
i++;
p= p/2;
}while (p>0);
}
else{
p=p *(-1);
do{
number+= (p%2)*pow(10,i);
i++;
p=p/2;
}while (p>0);
number*=-1;
}
return number;
}
long int int_to_bin(int* p){
long int j=1,number=0,number1=0,number2=0,digits;
char* c=&p;
number=char_to_bin(c);
for (j;j<(sizeof(int)/sizeof(char));j++){
number1=char_to_bin(c+j);
digits=floor(log10(abs(number1))) + 1;
number2=number1*pow(10,digits);
number=number1+number2;
}
return number;
}
int main(){
char k= 100;
char* j= &k;
int inte=100;
int *h;
h= &inte;
int c= char_to_bin(j);
printf("%d\n",c);
long int d= int_to_bin(h);
printf("%ld\n",d);
}
int char_to_bin(char* d) 函数将一个指向的 char 值转换为二进制数,我对其进行的所有测试都表明它有效。但是当我在int_to_bin(int* p) 中使用int char_to_bin(char* d) 时出现问题。
基本上,int_to_bin(int* p) 应该将指向 int 的第一个字节转换为二进制,然后将后面的字节(因为 char* 指向一个字节)转换为十进制,将字节乘以 10^(位数),这样例如,我可能会得到一个像“000000001100100”这样的数字,但是出了点问题,函数的结果与二进制有很大不同,另外,我试图在 int_to_bin(int* p) 函数中放置一个 printf("%d \n",number1),如下所示:
long int int_to_bin(int* p){
long int j=1,number=0,number1=0,number2=0,digits;
char* c=&p;
number=char_to_bin(c);
for (j;j<(sizeof(int)/sizeof(char));j++){
number1=char_to_bin(c+j);
printf("%d \n",number1); //---------------here------------------
digits=floor(log10(abs(number1))) + 1;
number2=number1*pow(10,digits);
number=number1+number2;
}
return number;
}
检查给定内存地址中包含的值...据我所知,int变量类型占用4个字节内存,字节内容之和就是值或者变量...但是我得到的结果与变量值完全不同。
有什么办法可以解决这个问题,还是我应该放弃并尝试将传递给int_to_bin(int* p) 的int 转换为char 并将其传递给char_to_bin(char* p) 函数?
【问题讨论】:
-
您所说的“int”可能是“unsigned int”或“uint32”。此外,您可能应该通过执行类似 'unsigned char hi_byte = myUint32 & 0xFF00' 和 'unsigned char lo_byte = myUint32 & 0x00FF' 之类的操作来屏蔽 'uint32' 来做到这一点。