Chào các bạn, Mình có thắc mắc thế này:
Mảng char X[4] có 4 phần tử( mỗi phần tử 1 byte) tổng cộng 4 byte và biến kiểu int cũng có 4 byte, vậy cho mình hỏi cách nào để chuyển 4 byte của mảng vào biến int ?
Gán dữ liệu của mảng char X[4] vào biến int A(4 byte)
Ôi trời.
Tạo 1 con trỏ kiểu int, trỏ vào đó là đc. :)
1 kiểu int, 1 kiểu char trỏ được không nhỉ ?
Mình làm kiểu này :
unsigned char CH[4];
unsigned int IN;
void GetValue()
{
IN=0;
IN|=CH[0];
IN<<=8;
IN|=CH[1];
IN<<=8;
IN|=CH[2];
IN<<=8;
IN|=CH[3];}
}
Đang hóng câu trả lời
trỏ cò bay thẳng cánh luôn
Và nó lấy luôn 1 block 4byte từ địa chỉ luôn
http://ideone.com/A9y4OB
Cảm ơn bạn nhiều lắm mình làm được rồi:
a thôi.
ko phải &a
(code sai tí )
mà cái vs nó kỹ thật nhỉ
Theo như mình biết thì đâu có thể tạo ra con trỏ kiểu int để trỏ vào 1 vùng có kiểu char đc nhỉ -_- , mà rốt cuộc là làm thế để làm gì?
Hmmm, v là cái này tùy vào compiler rồi
Thôi thì cứ làm nhu bạn Dương_Act là ổn nhất (y)
Cast sang int* là dc:
int * p=(int ) a*;
a==&a vì đây là mảng cố định nên địa chỉ của a cũng là của mảng
Làm thế này cho nó an toàn:
char a[] = {1, 2, 3, 4};
int b = *(int*)a;
Còn nếu bạn sợ pointer thì:
char a[] = {1, 2, 3, 4};
int b;
memcpy(&b, a, 4);
// nếu bạn xài Visual Studio thì có thể thay bằng lệnh này cho nó khỏi kêu ca:
memcpy_s(&b, 4, a, 4);
và thế là b không dính dáng gì tới a nữa.
Mình thử đoạn này :
unsigned char CH[4];
unsigned int RI=10;
void GetValue()
{
CH[0]=0;
CH[1]=0;
CH[2]=255;
CH[3]=255;
unsigned int *p=(unsigned int*)CH;
RI=*p;
printf("%d",RI);
getchar();
}
Kết quả xuất ra màn hình là 0. Lẽ ra phải là 65535. Mình có kiểm tra thấy *p = 0.
Mình in ra unsigned int cơ mà. Làm gì có chuyện int ra 1 byte đầu.
unsigned int RI=10;
printf("%d",RI);
Mình đọc nhầm (mà xóa cmt rồi mà nhỉ ) ,mình dùng hàm cout thì nó vẫn ra đúng giá trị ,có thể do sai ở %d vì mình dùng printf thì in sai
#include <iostream>
#include <stdio.h>
using namespace std;
int main(int argc, char *argv[])
{
unsigned char a[4]={0,0,255,255};
unsigned int *p=(unsigned int*)a;
for(int i=0;i<32;i++)
{
unsigned int temp=*p;
temp=temp&(0x01<<i);
if(temp==0)
cout<<temp;
else
cout<<1;
}
cout<<endl<<*p<<endl;
printf("%d",*p);//chỗ nãy %u thì ra đúng
return 0;
Mình dùng như sau :
unsigned char CH[4];
int main()
{
CH[0] = 0;
CH[1] = 0;
CH[2] = 0;
CH[3] = 1;
unsigned int *p = (unsigned int*)CH;
unsigned int i = *p;
//printf("%u", *p); => ra kết quả sai
//printf("%u", p); => ra kết quả sai
//printf("%u", i); => ra kết quả sai
//printf("%d", *p); => ra kết quả sai
//printf("%d", p); => ra kết quả sai
//printf("%d", i); => ra kết quả sai
getchar();
return 0;
}
Mình mới kiểm tra 1 dòng [printf("%u", *p) ] ,thấy kết quả đúng mà , *p của nó lúc này là 0000 0001 0000 0000 0000 0000 0000 0000, bạn tính ra nó là 16777216 ,mấy cái sau thì sai kiểu nên nó sai rồi ,chỉ có dòng %u là đúng kiểu
Đúng rồi.
Nãy giờ vẫn đang nghĩ mục đích sắp xếp theo kiểu CH[0]->CH[1]->CH[2]->CH[3].