Подскажите, как лучше в с++ объявить строку байт?
Например, на асме я пишу:
Через #define не получается, а массив объявлять не хочется, хочется, чтоб по-проще...Код:Test db 0FFh, 0FFh, 0FFh, 'test', 0Dh
unsigned char[8] bytes = "\x0ff\x0ff\x0fftest\x00d";
еще не проверил, но кажется нашол как такое сделать:есть вопрос:
сейчас я делаю сервер на с++, на данный момент просто принимаю данные от однго клиента и рассылаю их всем остальным - некий чат
я использую пул потоков, то есть:
основной потом принимает новые подключения и просматривает сокеты - есть ли данные
если приходят данные, то данный сокет я передаю в следующий поток для распределения нагрузки(в этом потоке может накапливатся очередь дял обработки)
этот поток ищет пустой рабочий и передает ему сокет который надо обработать
проблема заключается в том, что для передачи данных между сокетами я делал так: есть некая глобальная строка - я добавляю в нее данные которые надо передать, и был евент которым я блокировал потом если ему нечего делать, когда нужно - сбрасиваю евент и поток просипается, по 1 евенту на поток
это все работало в винде, теперь я перешел на ubuntu и как сделать такое сдесь? всмысле заменить эти евенты?
Непонятно, если спрашиваешь как перевести, то как ты написал программу. Если же почти написал то зачем спрашиваешь? Спрашивай конкретно про то, что не работаеткак мне перевести число с шестнадцатеричной системы счисления, скажем в десятеричную ?
Вводить, я так понимаю, будем строку (например число 7DA), а как потом её переделать в число.
написал прогу, которая переводит с любой системы (с 2 до 10ти ричной) в любую (проверял на 3,4,5,8,10,16ти ричной, работает), осталось только немного дописать
п.с. нужно для С.
всё, всё сделал. не знал как правильно считать число (например 3A4F) и потом с ним работать.Непонятно, если спрашиваешь как перевести, то как ты написал программу. Если же почти написал то зачем спрашиваешь? Спрашивай конкретно про то, что не работает
А вообщеYou must be registered for see links.
int a[20],i=0;
char n[20];
scanf("%s",&n);
while (n[i]!='\0'){
switch (n[i]){
case 'A':a[i]=10;break;
case 'B':a[i]=11;break;
case 'C':a[i]=12;break;
case 'D':a[i]=13;break;
case 'E':a[i]=14;break;
case 'F':a[i]=15;break;
default:a[i]=n[i]-'0';
}
i++;
}
если бы надо было работать только с шестнадцатеричной и десятичной, то надо юзать:всё, всё сделал. не знал как правильно считать число (например 3A4F) и потом с ним работать.
сделал так:
Код:int a[20],i=0; char n[20]; scanf("%s",&n); while (n[i]!='\0'){ switch (n[i]){ case 'A':a[i]=10;break; case 'B':a[i]=11;break; case 'C':a[i]=12;break; case 'D':a[i]=13;break; case 'E':a[i]=14;break; case 'F':a[i]=15;break; default:a[i]=n[i]-'0'; } i++; }
int x;
scanf("%X",&x); /или %x если буковки маленькие
нет, нужно с любой в любую переводить, по этому так не получитсяесли бы надо было работать только с шестнадцатеричной и десятичной, то надо юзать:
т.е. мы говорим что нужно считать шестнадцатеричное числоКод:int x; scanf("%X",&x); /или %x если буковки маленькие
если нужно вывести с буковками, то довольно просто - взять это число в десятичной и сделать строку через функцию itoa в ней третий параметр - система счисления
Все верно, хотя собственно буквы тоже идут последовательно, так что можно делать проще:всё, всё сделал. не знал как правильно считать число (например 3A4F) и потом с ним работать.
сделал так:
Код:int a[20],i=0; char n[20]; scanf("%s",&n); while (n[i]!='\0'){ switch (n[i]){ case 'A':a[i]=10;break; case 'B':a[i]=11;break; case 'C':a[i]=12;break; case 'D':a[i]=13;break; case 'E':a[i]=14;break; case 'F':a[i]=15;break; default:a[i]=n[i]-'0'; } i++; }
for (int i = 0; i < strlen(str); i++) {
if ('9' >= str[i] && str[i] >= '0')
num[i] = str[i] - '0';
if ('a' >= str[i] && str[i] >= 'z')
num[i] = str[i] - 'a' + 10;
if ('A' >= str[i] && str[i] >= 'Z')
num[i] = str[i] - 'A' + 10;
}