मैं 4 चार (4 बाइट्स) को एक हस्ताक्षरित int में स्टोर करना चाहता हूं।मैं बिटवर्ड ऑपरेशन का उपयोग कर 4 char को एक हस्ताक्षरित int में कैसे स्टोर कर सकता हूं?
उत्तर
फिर आप पर एक चार के टुकड़े बदलाव, या उन्हें पूर्णांक में गठबंधन करने के लिए की जरूरत है:
unsigned int final = 0;
final |= (data[0] << 24);
final |= (data[1] << 16);
final |= (data[2] << 8);
final |= (data[3] );
वर्ण की एक सरणी का उपयोग करता है यही कारण है कि है, लेकिन यह कोई फर्क नहीं पड़ता कैसे डेटा में आ रहा है एक ही सिद्धांत है । (मैं मैं बदलाव का अधिकार मिल गया लगता है)
आप इस तरह यह कर सकता है (नहीं बिट के लिहाज से, लेकिन शायद अधिक आसान):
unsigned int a;
char *c;
c = (char *)&a;
c[0] = 'w';
c[1] = 'o';
c[2] = 'r';
c[3] = 'd';
या आप चाहते हैं, तो थोड़ा-वार आप का उपयोग कर सकते हैं:
unsigned int a;
a &= ~(0xff << 24); // blank it
a |= ('w' << 24); // set it
// repeat with 16, 8, 0
यदि आप पहले इसे खाली नहीं करते हैं तो आपको दूसरा परिणाम मिल सकता है।
क्या आपको एक कलाकार की आवश्यकता नहीं है, क्या यह सी = (char *) और ए होना चाहिए? –
यह वैकल्पिक होगा। मैं इसे जोड़ दूंगा। धन्यवाद – Iustin
एक और तरीका यह है:
#include <stdio.h>
union int_chars {
int a;
char b[4];
};
int main (int argc, char const* argv[])
{
union int_chars c;
c.a = 10;
c.b[0] = 1;
c.b[1] = 2;
c.b[2] = 3;
c.b[3] = 4;
return 0;
}
अधिक सरल, इसकी बेहतर:
/*
** Made by CHEVALLIER Bastien
** Prep'ETNA Promo 2019
*/
#include <stdio.h>
int main()
{
int i;
int x;
char e = 'E';
char t = 'T';
char n = 'N';
char a = 'A';
((char *)&x)[0] = e;
((char *)&x)[1] = t;
((char *)&x)[2] = n;
((char *)&x)[3] = a;
for (i = 0; i < 4; i++)
printf("%c\n", ((char *)&x)[i]);
return 0;
}
मैं सी –
ओह में उदाहरण कोड में 'char' कीवर्ड उपयोग करने का सुझाव नहीं होगा, हाँ, यह बुरा है। फिक्स्ड। :) – ssube
यदि 'डेटा' एक 'हस्ताक्षरित चार' सरणी है, तो' | = 'और' << 'आपकी इच्छानुसार काम नहीं करेगा। –