У вашому питанні, ви заявили , що ви хочете , щоб перетворити введення дані користувача з 175 в
00000000 00000000 00000000 10101111, який є великими байтами порядків байт, також відомі як мережевий порядок байт .
Головним чином портативний спосіб перетворити ціле число без знака в великому Endian беззнакового масив символів, як ви запропонували з цього прикладу «175» ви дали, був би використовувати Кассіопеян htonl()функцію (яка визначається в заголовку <arpa/inet.h>на системах Linux) , щоб перетворити непідписані Int в великий порядок байтів endian, а потім використовуйте memcpy()(визначений у заголовку <string.h>для C, <cstring>для C ++), щоб скопіювати байти у ваш масив char (або без знака char).
htonl()Функція приймає беззнаковое 32-бітове ціле число в якості аргументу (на відміну від htons(), який приймає в беззнаковое 16-бітове ціле число) і перетворює його в мережевий порядок байтів від порядку хоста байт (звідси абревіатура, що приймає до мережевих Лонг, проти Host TO Network Short для htons), повертаючи результат у вигляді беззнакового 32-бітового цілого числа. Призначення цього сімейства функцій полягає у забезпеченні того, щоб усі мережеві комунікації відбувалися у великому ендіанському байтовому порядку, щоб усі машини могли спілкуватися між собою через сокет без проблем із байтовим порядком. (До речі, для тупоконечников машин, htonl(), htons(), ntohl()іntohs() функції, як правило, компілюються просто для того, щоб "не працювати", оскільки байти не потрібно перегортати, перш ніж вони будуть відправлені або отримані з сокета, оскільки вони вже в належному порядку байтів)
Ось код:
#include <stdio.h>
#include <arpa/inet.h>
#include <string.h>
int main() {
unsigned int number = 175;
unsigned int number2 = htonl(number);
char numberStr[4];
memcpy(numberStr, &number2, 4);
printf("%x %x %x %x\n", numberStr[0], numberStr[1], numberStr[2], numberStr[3]);
return 0;
}
Зверніть увагу, що, як сказав caf, вам потрібно надрукувати символи як символи без підпису за допомогою %xспецифікатора формату printf .
Вищезазначений код друкується 0 0 0 afна моїй машині (машині x86_64, яка використовує мало впорядкування байтів ендіана), яка має шістнадцяткове значення для 175.