2012-04-10 3 views
-1

У меня есть значения, такие как 12, 13, которые я хочу назначить для одного целочисленного примера, k. Я пробовал следующую программу, но я не получаю ожидаемых результатов.доступ к байтам целого числа в c

enter code here 
#include <stdio.h> 
int main() 
{ 

int k = 0; 
printf("k address is %u\n", &k); 
char* a = &k; 
printf("%u\n", a); 
*(a) = 12; 
a++; 
printf("%u\n", a); 
*(a) = 13; 
printf("k is %d\n",k); 
return 0; 
} 

и выход:

k address is 3213474664 
3213474664 
3213474665 
k is 3340 
+1

13 * 256 + 12 = 3340. Что вы ожидали? –

+0

думаю, если у меня есть ip-адрес 128.99.1.20, который теперь является указателем на char, я должен лишить '.' и получил его как 12899120 в отдельных переменных int, таких как a, b, c, d, теперь я хочу, чтобы все это было одно целое. – user954299

+0

Затем, пожалуйста, отредактируйте свой вопрос, чтобы он включал фактический вопрос (т. Е. То, чего вы хотите достичь). –

ответ

1

Если вы хотите изменить байтов в целых числах, не зависящих от конца, вы должны использовать сдвиги и побитовые операторы.

Например, если вы пытаетесь хранить IP-адрес 1.2.3.4 в 32-разрядное целое число, вы можете сделать:

unsigned int addr = (1 << 24) | (2 << 16) | (3 << 8) | 4; 

Это гарантирует, что 1 является наиболее значащими байтами и так далее ,

2

На вашей системе, int s, очевидно, хранятся в формате little-endian, потому что 13 * 256 + 12 = 3340.

Смежные вопросы