Bitta turdagi bir qatorni boshqa turdagi qatorga ko'chirish mumkinmi?

Masalan, olishim mumkin

int array[12];

va uni char [48] ga to'g'ridan-to'g'ri markerni tashlab qo'yib yuboring va int mening mashinamda 4 bayta deb taxmin qilinsa? Buning uchun sintaksis qanday bo'lishi kerak va umuman, bu qo'llaniladimi?

Yangi qatorning o'lchami aniq bo'lmasligini bilaman, ya'ni Men o'zimning bo'linimni bajarishim kerak edi, yana shuni bilamanki mashinamda int 4 baytlar.

0
Boost :: serializatsiya kabi biron bir kutubxonadan foydalanmasdan, tamsayı qatorini string (yoki c-string) ga ketma-ketlashtirishni xohladim. Kodlash mashqlari uchun. Bilaman, buni "naif" usulda qila olaman, lekin bu haqda hayron bo'ldim.
qo'shib qo'ydi muallif Andrew Cheong, manba
@IInspectable - Men faqat misolimdagi matematika bilan shug'ullanardim. Tuzatish, rahmat.
qo'shib qo'ydi muallif Andrew Cheong, manba
@IInspectable - Men faqat misolimdagi matematika bilan shug'ullanardim. Tuzatish, rahmat.
qo'shib qo'ydi muallif Andrew Cheong, manba
@IInspectable - Men faqat misolimdagi matematika bilan shug'ullanardim. Tuzatish, rahmat.
qo'shib qo'ydi muallif Andrew Cheong, manba
To'satdan ko'rsatgichlar hech qanday muammo tug'dirishi mumkin yoki bo'lmasligi mumkin. Bu pastga qarama-qarshilik bilan bog'liq muammolar haqida hech narsa demaydi. Bu ko'rsatgichlardan qanday foydalanayotganingizga bog'liq
qo'shib qo'ydi muallif R Sahu, manba
char array [3] (3 bayt) uchun int array [12] (platformangizda 48 bayt) chindan ham istaysizmi? Yoki qator qatorlarni aralashtirdingizmi?
qo'shib qo'ydi muallif IInspectable, manba
char array [3] (3 bayt) uchun int array [12] (platformangizda 48 bayt) chindan ham istaysizmi? Yoki qator qatorlarni aralashtirdingizmi?
qo'shib qo'ydi muallif IInspectable, manba
char array [3] (3 bayt) uchun int array [12] (platformangizda 48 bayt) chindan ham istaysizmi? Yoki qator qatorlarni aralashtirdingizmi?
qo'shib qo'ydi muallif IInspectable, manba

9 javoblar

Ko'p ko'rsatgich turini reinterpret_cast yordamida boshqa ko'pgina imleci turlariga ko'chirishingiz mumkin. .

Usage to : auto ptr = reinterpret_cast(array);.

Tizimda int 4 bayt bo'lsa, uning o'rniga sizeof (int) foydalanishingiz mumkin. Sizning savolingizning so'zlari, siz char * -ga ko'chirilganda qatorning "kattaligi" haqida sizni chalkashtirib yuborishingiz mumkin. int , char dan katta </​​code> sizeof (int) vaqtidir. sizeof (int) == 4 bo'lsa, u holda int s sizning qatoringizda 4 * 12 = 48 baytni oladi.

1
qo'shib qo'ydi

Ko'p ko'rsatgich turini reinterpret_cast yordamida boshqa ko'pgina imleci turlariga ko'chirishingiz mumkin. .

Usage to : auto ptr = reinterpret_cast(array);.

Tizimda int 4 bayt bo'lsa, uning o'rniga sizeof (int) foydalanishingiz mumkin. Sizning savolingizning so'zlari, siz char * -ga ko'chirilganda qatorning "kattaligi" haqida sizni chalkashtirib yuborishingiz mumkin. int , char dan katta </​​code> sizeof (int) vaqtidir. sizeof (int) == 4 bo'lsa, u holda int s sizning qatoringizda 4 * 12 = 48 baytni oladi.

1
qo'shib qo'ydi

Ko'p ko'rsatgich turini reinterpret_cast yordamida boshqa ko'pgina imleci turlariga ko'chirishingiz mumkin. .

Usage to : auto ptr = reinterpret_cast(array);.

Tizimda int 4 bayt bo'lsa, uning o'rniga sizeof (int) foydalanishingiz mumkin. Sizning savolingizning so'zlari, siz char * -ga ko'chirilganda qatorning "kattaligi" haqida sizni chalkashtirib yuborishingiz mumkin. int , char dan katta </​​code> sizeof (int) vaqtidir. sizeof (int) == 4 bo'lsa, u holda int s sizning qatoringizda 4 * 12 = 48 baytni oladi.

1
qo'shib qo'ydi

To'g'ri C ++ usuli reinterpret_cast bilan birgalikda berilgan:

int array[12];
char* pChar = reinterpret_cast(array);

12 * (sizeof (int)/sizeof (char)) ga teng bo'lgan sizeof (array) 12 * sizeof (int) (char) odatda sizeof (int) ning chorak qismini tashkil etgani uchun sizeof (char [3]) dan katta bo'lgan (agar bo'lmasa) kodi>.

So int array[12]; can be interpeted as char array[12*4];

1
qo'shib qo'ydi
int char dan har qanday platformasida ( int ) kamida 16 bitlik kenglikdan katta.
qo'shib qo'ydi muallif IInspectable, manba

To'g'ri C ++ usuli reinterpret_cast bilan birgalikda berilgan:

int array[12];
char* pChar = reinterpret_cast(array);

12 * (sizeof (int)/sizeof (char)) ga teng bo'lgan sizeof (array) 12 * sizeof (int) (char) odatda sizeof (int) ning chorak qismini tashkil etgani uchun sizeof (char [3]) dan katta bo'lgan (agar bo'lmasa) kodi>.

So int array[12]; can be interpeted as char array[12*4];

1
qo'shib qo'ydi
int char dan har qanday platformasida ( int ) kamida 16 bitlik kenglikdan katta.
qo'shib qo'ydi muallif IInspectable, manba

To'g'ri C ++ usuli reinterpret_cast bilan birgalikda berilgan:

int array[12];
char* pChar = reinterpret_cast(array);

12 * (sizeof (int)/sizeof (char)) ga teng bo'lgan sizeof (array) 12 * sizeof (int) (char) odatda sizeof (int) ning chorak qismini tashkil etgani uchun sizeof (char [3]) dan katta bo'lgan (agar bo'lmasa) kodi>.

So int array[12]; can be interpeted as char array[12*4];

1
qo'shib qo'ydi
int char dan har qanday platformasida ( int ) kamida 16 bitlik kenglikdan katta.
qo'shib qo'ydi muallif IInspectable, manba
 int array[12];
 char * p = (char *) array;
//do what you want with p

Albatta, p tipida char [3] mavjud emas, lekin bu siz uchun muhim emas.

0
qo'shib qo'ydi
 int array[12];
 char * p = (char *) array;
//do what you want with p

Albatta, p tipida char [3] mavjud emas, lekin bu siz uchun muhim emas.

0
qo'shib qo'ydi
 int array[12];
 char * p = (char *) array;
//do what you want with p

Albatta, p tipida char [3] mavjud emas, lekin bu siz uchun muhim emas.

0
qo'shib qo'ydi