2015-05-26 4 views
1

Попытка использовать функцию htonl() для программы, которая посылает сообщение инициализации на сервере, наряду с целым значением, скажем, 5. Однако htonl() необходимы следующие uint32_t целое hostlongПреобразование целого числа в Unsigned Long

Как преобразовать 5 в целое число без знака?

+2

Можете ли вы принять ответ Кита, чтобы я мог удалить мою? Это вводит в заблуждение, я не должен был отвечать на это. –

+0

Я имею в виду, что ответ не имеет ничего плохого, просто в вашем случае вам действительно не нужен бросок. –

+0

@iharob Сделано. Благодаря!! – themacexpert

ответ

4

htonl функция объявлена ​​в <arpa/inet.h>. Если у вас есть правильный #include для этого заголовка:

#include <arpa/inet.h>` 

декларация

uint32_t htonl(uint32_t hostlong); 

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

Если вы хотите, чтобы передать значение 5 функции htonl, просто передать его:

uint32_t result = htonl(5); 

Константа 5 имеет тип int. Компилятор будет генерировать неявное преобразование от int до uint32_t. (Это, вероятно, преобразование не будет на самом деле нужно сделать что-нибудь.)

Если значение 5 хранится в int объекта, это то же самое:

int n = 5; 
uint32_t result = htonl(n); 

Нет явного преобразования (CAST) необходимо ,

(Кстати, есть важное различие между «int» и «целое». Есть целый ряд целочисленных типов, в том числе short, unsigned long, uint32_t, и так далее. int это название одного из этих типов. unsigned long значение is целое.)

0

Я думаю, что вы ищете работу типажей - что-то вдоль линий

int foo = 5; 
htonl((unsigned int) foo); 
+0

@iharob Комментарий к '-5' не связан с этим ответом. Предлагайте Разработать свою мысль. – chux

+1

Предполагая, что прототип 'htonl' виден, актер просто выполняет то же преобразование, которое было бы сделано неявно. –

+1

@ Keith Thompson С 'uint32_t htonl (uint32_t hostlong);', casting to '(unsigned int)' обычно совпадает с вызовом без кавычек, но будет отличаться, если 'int/unsigned' является 16-битным. Рассмотрим 'int foo = -1;' – chux

0

htonl(3) - страницы человека Linux

uint32_t htonl(uint32_t hostlong); 

htonl() функция преобразует целое число без знака hostlong от байта хоста до байта сети.

Так все, что вам нужно сделать, это бросить переменная

uint32_t x = 5; 
htonl(x); 
+0

« лить свою переменную »?? Я вижу задание, но никакого броска. – chux

+0

@chux: Это хорошо, потому что никакого приведения не требуется. (Чтобы уточнить, неявное преобразование не является литой, термин «приведение» относится только к явному оператору.) –