Простой способ преобразовать char в wchar_t

Filed in Програм-е Leave a comment

Функция преобразования строк из char в wchar_t:

#include <sstream>
//char в wchar_t
bool char2wchar_t(char *str1, wchar_t *str2){
	std::wstringstream st;
	st << str1;
	return !(st >> str2).fail();
};

Пример использования:

char cStr[]="Hello";
wchar_t wStr[10];
char2wchar_t(cStr,wStr);

, , , , , , , , , ,

Числа

Filed in Web | Новости Leave a comment

Недавно, мы создали маленький проект — можно даже сказать, эксперимент. Суть его заключается в том, чтобы узнать какие из чисел от 1 до 100 более популярны, а какие менее. Вы можете принять участие в этом эксперименте на http://vsreality.net/numbers . Концепт прост: впишите число и введите его в нашу датабазу. Если вам понравилась наша идея, вы можете помочь нам и порекомендовать ссылку вашим знакомым.

Спасибо всем!

, ,

C++ Int в массив байт и обратно

Filed in Програм-е Leave a comment

Иногда возникает необходимость, преобразовать число в формате int в массив байт и обратно. К примеру для его передачи по сети, так после преобразования числа в массив вам будет необходимо передать только четыре байта информации в место того, что бы передавать все цифры длинного числа.

//int to uchar
bool int2bytes(int &i, uchar *buf){
	memcpy(buf,&i,sizeof(int));
	return true;
}
//uchat to int
void bytes2int(uchar *buf, int &i){
	memcpy(&i,buf,sizeof(int));
}

, , , , , , , ,

C++ Клиент и сервер с использованием WinApi socket

Filed in Програм-е 1 Comment

Давно хотел научиться работать с сокетами в windows, но все как-то не мог начать. Недавно наткнулся на хорошую статью в интернете, где были примеры клиентского и серверного приложений. Нашёл еще немного информации, на данную тему, обобщил её и смог запустить мой первый клиент и сервер. Вот о них я и буду говорить. Я не использовал ничего лишнего, только то, что предлагает WinAPI.
И так, для того, чтобы написать любое приложение, которое работает с сокетами в Windows, необходимо включить в ваш проект файл winsock2.h и библиотеку WS2_32.lib В Microsoft Visual C++ Express edition. Это можно сделать так: Проект -> Свойства проекта -> Свойства конфигурации -> Компоновщик -> Ввод и в поле “Дополнительные зависимости” нужно вписать имя библиотеки.

И так, код сервера:

#include <winsock2.h>
#include <stdio.h>
 
int main(void)
{
    WORD sockVer;
    WSADATA wsaData;
    int retVal;
 
    sockVer = MAKEWORD(2,2);
 
    WSAStartup(sockVer, &wsaData);
 
    //Создаем сокет
    SOCKET servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    if(servSock == INVALID_SOCKET)
    {
        printf("Unable to create socket\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
	SOCKADDR_IN sin;
    sin.sin_family = PF_INET;
    sin.sin_port = htons(1111);
    sin.sin_addr.s_addr = INADDR_ANY;
 
    retVal = bind(servSock, (LPSOCKADDR)&sin, sizeof(sin));
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to bind\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
 
    //Пытаемся начать слушать сокет
    retVal = listen(servSock, 10);
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to listen\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
    //Ждем клиента
    SOCKET clientSock;
 
    clientSock = accept(servSock, NULL, NULL);
 
    if(clientSock == INVALID_SOCKET)
    {
        printf("Unable to accept\n");
        WSACleanup();
        return SOCKET_ERROR;
    }
 
    char szReq[8]; 
    retVal = recv(clientSock, szReq, 8, 0);
 
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to recv\n");
        return SOCKET_ERROR;
    }
 
    printf("Got the request from client\n%s\n",szReq);
 
    char *szResp = "Response";
 
    printf("Sending response from server\n");
    retVal = send(clientSock, szResp, strlen(szResp), 0);
 
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to send\n");
        return SOCKET_ERROR;
    }
 
    //Закрываем сокет
    closesocket(clientSock);
    closesocket(servSock);
 
    WSACleanup();
    return 0;
}

Код клиента:

#include <stdio.h>
#include <winsock2.h>
 
int main()
{
    WORD ver = MAKEWORD(2,2);
    WSADATA wsaData;
    int retVal=0;
 
    WSAStartup(ver,(LPWSADATA)&wsaData);
 
    LPHOSTENT hostEnt;
 
    hostEnt = gethostbyname("localhost");
 
    if(!hostEnt)
    {
        printf("Unable to collect gethostbyname\n");
        WSACleanup();
        return 1;
    }
 
    //Создаем сокет
    SOCKET clientSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 
    if(clientSock == SOCKET_ERROR)
    {
        printf("Unable to create socket\n");
        WSACleanup();
        return 1;
    }
 
    SOCKADDR_IN serverInfo;
 
    serverInfo.sin_family = PF_INET;
    serverInfo.sin_addr = *((LPIN_ADDR)*hostEnt->h_addr_list);
    serverInfo.sin_port = htons(1111);
 
    retVal=connect(clientSock,(LPSOCKADDR)&serverInfo, sizeof(serverInfo));
    if(retVal==SOCKET_ERROR)
    {
        printf("Unable to connect\n");
        WSACleanup();
        return 1;
    }
 
    printf("Connection made sucessfully\n");
 
    char *pBuf = "Request";
 
    printf("Sending request from client\n");
    retVal = send(clientSock, pBuf, strlen(pBuf), 0);
 
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to send\n");
        WSACleanup();
        return 1;
    }
 
 
    char szResponse[9];
    retVal = recv(clientSock, szResponse, 9, 0);
 
    if(retVal == SOCKET_ERROR)
    {
        printf("Unable to recv\n");
        WSACleanup();
        return 1;
    }
 
    printf("Got the response from server\n%s\n",szResponse);
 
    closesocket(clientSock);
    WSACleanup();
 
    return 0;
}

Информацию о функциях, используемых в примерах можно найти здесь
Так же, замечательная статья, которая помогла мне разобраться здесь

, , , ,

C++ Пример работы с массивом char

Filed in Програм-е 1 Comment

char* names[] = { "pic1.png", "pic2.png", "pic3.png",
                  "pic4.png", "pic5.png", "pic6.png", 0 };
 
for( i = 0; names[i] != 0; i++ )
{
	printf("%s", names[i] );
}

, , ,

C++ – Пример программы с использованием winapi

Filed in Програм-е Leave a comment

Эта маленькая программа просто выводит сообщение на экран. Для того, что бы запустить ее вам необходим о создать win32 проект(не консольный) и просто встать текст программы приведенный ниже. Информацию о функции MessageBox можно получить здесь.

#include <windows.h>
 
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nShow)
{
	MessageBox(NULL, (LPCWSTR)L"Hello world!!!", (LPCWSTR)L"Welcome message", MB_OK);
	return 0;
}

, ,

Конструктор. Протяжка

Filed in Наработки 1 Comment

Проектируя металлорежущий инструмент часто требуется проводить одни и те же расчеты ища оптимальный вариант. Расчеты можно производить и другими программными средствами, однако учитывая кучу факторов, законов теории резания и зависимостей этот процесс может оказаться сложным и весьма запутанным.

С целью оптимизации и автоматизации многих вычислений основанных на логике и пишется данная программа. Так как сама по себе работа весьма трудоемка искать оптимальных вариантов среды разработки не стал. Пишу на том что знаю – C# + WPF.

Пока что окно разделено на 3 блока.

  • Свойства – слева, здесь происходит вся основная работа, изменения.
  • Визуализация – справа, здесь будет отображаться параметры инструмента которые меняются в данный момент (рабочая отверстие, параметры протяжки, зависимости).
  • Иерархия – внизу., здесь будет отображено дерево блоков из которых состоит инструмент (протяжка) в виде графов. В котором можно будет визуально оценить преимущества некоторых параметров различных вариантов протяжек.

Работа весьма большая по объему, однако пока что делается.

На данный момент идет работа с блоком Свойства и разработан класс работы с проектом. Входя в меню Файл можно создать, открыть, сохранить или закрыть ваш проект. Основная информация проекта хранится в виде xml-файла.

Некоторые вопросы еще требуют времени на разбор однако начало дано и главное есть желание и возможность его закончить.

, , , ,

Arduino – Мнение

Filed in Роботы Leave a comment

Не так давно я приобрел Arduino Duemilanove стоимостью в $28, если подумать эта довольно низкая цена по сравнению с другими подобными решениями, и по сравнению с тем что Arduino может дать начинающим.

И так Arduino Duemilanove, что же это такое? Ответ прост микроконтроллерный модуль, по сути обложка для ATMega328 микроконтроллера. Arduino позволяет легко программировать микроконтроллер и легко взаимодействовать с ним, что немало важно для людей кто ни когда не работал с микроконтроллерами. Модуль может выступать не только как основа для робота но и так же в роли программатора для ATMega328 так как на нем установлен сокет для него, и в роли интерфейса для подключения периферийных устройств таких как сенсоры или сервомоторы. Arduino может легко получать команды от компьютера как как при подключение к компьютеру он появляется в виде обыкновенного COM-порта.

Весь софт для программирования модуля бесплатный, а его код открыт для всех желающих. Это дало Arduino большую популярность, большое количество людей работают над его улучшением и развитием, написанием модулей и библиотек.

, ,

Arduino – Подключение HMC6352

Filed in Роботы Leave a comment

#include <Wire.h> 
 
int compassAddress = 0x42 >> 1;  // Из спецификации компаса, его адрес 0x42
                                 // Сдвигаем адрес на 1 bit в право, так как Wire библиотека
                                 // требует только 7 bits адреса
int reading = 0; 
 
void setup()
{
  Wire.begin();                // Подключаемся к i2c шине (обязательно для мастера)
  Serial.begin(9600);          // Начинаем передачу данных по COM порту со скоростью 9600bps
} 
 
void loop()
{
  // Шаг 1: Отправка команды компасу на измерение угла
  Wire.beginTransmission(compassAddress);  // Посылаем устройству
                           // Адрес для компаса из спецификации 66 (0x42)
                           // но i2c адресация использует только 7 высших бит,
                           // это значит что адрес компаса 33
  Wire.send('A');          // Отправка команды компасу на измерение угла
  Wire.endTransmission();  // Остановка передачи данных
 
  // Шаг 2: Ждем пока чтение завершится
  delay(10);               // По спецификации нужно ждать как минимум 6000 микросекунд 
 
  // Шаг 3: Запрос на чтение сенсора
  Wire.requestFrom(compassAddress, 2);  // Запрос на получение 2 битов
                                                        //  от ведомого устройства #33
 
  // Шаг 4: Запрос на чтение сенсора
  if(2 <= Wire.available())     // Если два байта информации были получены от сенсора
  {
    reading = Wire.receive();   // Получаем первый байт
                                //(переписывает предшествующий результат)
    reading = reading << 8;     // Сдвигаем первый байт на 8 бит влево
    reading += Wire.receive();  // Получаем второй байт и добавляем к результату
    reading /= 10;
    Serial.println(reading);    // выводим результат
  } 
 
  delay(500);                   // Ждем пол секунды
}

Ссылки:
Compass Module – HMC6352
http://wiring.org.co

, , ,

English – Adjectives that describe character(Прилагательные описывающие характер)

Filed in Разное Leave a comment

easygoing = easy to talk to / easy to live with
tidy = clean / organize
greedy = person who doesn’t like to give money or share somethink
cranky = unhappy / complaining
rude = inpolite / disrespectful
mature = thinking like adult
childish = behaving like kid
ignorant = with little or no knowlege
narrow-minded = conservative / who doesn’t like new things
gifted = talented
fussy = nervous and hectic
punctual = being on time
short-tempered = easy to get angry
reckless = careless / irresponsible
light-hearted = not serious / without any care
humble = simple / modest
loyal = true to a spouse / a friend
hypocritical(double-faced) = saying one thing? thinking another thing
bossy = like to order
anxious = worried

, , , ,

TOP