Вопрос по С++

Vitus

аматор
Подскажите, как лучше в с++ объявить строку байт?
Например, на асме я пишу:
Код:
Test	db	0FFh, 0FFh, 0FFh, 'test', 0Dh
Через #define не получается, а массив объявлять не хочется, хочется, чтоб по-проще...
 

Cris

Member
есть вопрос:
сейчас я делаю сервер на с++, на данный момент просто принимаю данные от однго клиента и рассылаю их всем остальным - некий чат
я использую пул потоков, то есть:
основной потом принимает новые подключения и просматривает сокеты - есть ли данные
если приходят данные, то данный сокет я передаю в следующий поток для распределения нагрузки(в этом потоке может накапливатся очередь дял обработки)
этот поток ищет пустой рабочий и передает ему сокет который надо обработать
проблема заключается в том, что для передачи данных между сокетами я делал так: есть некая глобальная строка - я добавляю в нее данные которые надо передать, и был евент которым я блокировал потом если ему нечего делать, когда нужно - сбрасиваю евент и поток просипается, по 1 евенту на поток
это все работало в винде, теперь я перешел на ubuntu и как сделать такое сдесь? всмысле заменить эти евенты?
еще не проверил, но кажется нашол как такое сделать:
 

Vitus

аматор
dreamer, спасибо за наводку, сделал так:
#define Test "\x0FF\x0FF\x0FFtest\x0D"
 

Пух

كنت بلهاء
Модератор
как мне перевести число с шестнадцатеричной системы счисления, скажем в десятеричную ?
Вводить, я так понимаю, будем строку (например число 7DA), а как потом её переделать в число.
написал прогу, которая переводит с любой системы (с 2 до 10ти ричной) в любую (проверял на 3,4,5,8,10,16ти ричной, работает), осталось только немного дописать :(
п.с. нужно для С.
 
Останнє редагування:

dreamer

Member
как мне перевести число с шестнадцатеричной системы счисления, скажем в десятеричную ?
Вводить, я так понимаю, будем строку (например число 7DA), а как потом её переделать в число.
написал прогу, которая переводит с любой системы (с 2 до 10ти ричной) в любую (проверял на 3,4,5,8,10,16ти ричной, работает), осталось только немного дописать :(
п.с. нужно для С.
Непонятно, если спрашиваешь как перевести, то как ты написал программу. Если же почти написал то зачем спрашиваешь? Спрашивай конкретно про то, что не работает :)
А вообще .
 

Пух

كنت بلهاء
Модератор
Непонятно, если спрашиваешь как перевести, то как ты написал программу. Если же почти написал то зачем спрашиваешь? Спрашивай конкретно про то, что не работает :)
А вообще .
всё, всё сделал. не знал как правильно считать число (например 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++;
}
 

Cris

Member
всё, всё сделал. не знал как правильно считать число (например 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 если буковки маленькие
т.е. мы говорим что нужно считать шестнадцатеричное число

если нужно вывести с буковками, то довольно просто - взять это число в десятичной и сделать строку через функцию itoa в ней третий параметр - система счисления
 

Пух

كنت بلهاء
Модератор
если бы надо было работать только с шестнадцатеричной и десятичной, то надо юзать:
Код:
int x;
scanf("%X",&x); /или %x если буковки маленькие
т.е. мы говорим что нужно считать шестнадцатеричное число

если нужно вывести с буковками, то довольно просто - взять это число в десятичной и сделать строку через функцию itoa в ней третий параметр - система счисления
нет, нужно с любой в любую переводить, по этому так не получится :)
 

dreamer

Member
всё, всё сделал. не знал как правильно считать число (например 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;
    }
 
Зверху