Стандарт С++ 98/2003
3.9.1.3
each signed integer type has the same object representation
as its corresponding unsigned integer type.
Я правильно понимаю, что это означает, что можно сделать так
int a = -5;
unsigned int a_new = 0;
usigned char buf[sizeof(int)];
memcpy(&buf,&a,sizeof(int));
memcpy(&a_new, &buf, sizeof(int));
a=0;
memset(buf,0,sizeof(int)];
memcpy(&buf,&a_new,sizeof(int));
memcpy(&a,&buf,sizeof(int));
И мы восстановим изначальное значение? Ну что стандарт это грантирует? И вопрос два. Правильно ли я понимаю, что следующий код по стандарту не гарантированно работает?
int a = -5;
unsigned int a_new = (unsigned int) a;
a=0;
a = (int) a_new;
Вопрос вот к чему. Сетевые функции htonl и прочие принимают на вход беззнаковые типы. А если я хочу передать знаковый? При передачи его в такую функцию будет преобразование к знаковому. А можно ли делать при получение данных обратный каст? Есть ли в стандарте гарантия, что при обратном касте на другой платформе мы восстановим число?