ورود

View Full Version : سوال: چند تا سوال مختلف



zahmatkesh8519
چهارشنبه 10 اسفند 1390, 21:32 عصر
1. چطور می شه ListBox رو Clear کرد ؟
2. معدل #region سی شارپ در MFC چیه ؟
3. کامپوننتی برای افزایش سرعت کار با ادیتور کد در VC++ وجود داره ، که مثل سی شارپ سرعت کد نویسی رو افزایش بده . یا کدی که باید در جای بخصوصی نوشته بشه رو از لیستش محدود تر کنه و نمایش بده .
4. تبدیل hex به کاراکتر چطوریه ؟ تابعی وجود داره ؟

jeson_park
یک شنبه 14 اسفند 1390, 13:50 عصر
1- فرضا شما یه لیست باکس داری به این صورت


CListBox *m_SimpleList = new CListBox;

m_SimpleList->Create(WS_CHILD | WS_VISIBLE,
CRect(20, 20, 120, 120),
this,
0x118);

حالا می تونید تابع ResetContent رو صدا بزنید تا محتویات لیست باکس رو پاک کنه
m_SimpleList ->ResetContent();
و یا پیغام LB_RESETCONTENT رو به لیست باکست بفرست


SendMessage(hwndListBox, LB_RESETCONTENT, 0, 0);


2-


#pragma region yourRegionExplanation
// code
// code
// code
#pragma endregion


3- :متفکر:

4-


template<typename T>
char HexStrToChar(const T HexStr)
{
std::istringstream ist(HexStr);
int value;
ist >> std::hex >> value;
return value;
}

Example usage:


char c = HexStrToChar("5A");

zahmatkesh8519
دوشنبه 22 اسفند 1390, 13:47 عصر
داداش خیلی ممنون
کمک حال خوبی بود جوابت .
این قسمت آخرش ولی کار نکرد . الان تو console که کد نمی نویسم چی رو تغییر بدم درست می شه ؟


مشکل ام الان این هست که data ی ولیویی رو از ریجیستری می خونم ولی اگر از نوع های زیر باشه باید اول از هگز یا باینری تبدیل به رشته بشه بعد نمایش داده بشه .
REG_DWORD,REG_DWORD_LITTLE_ENDIAN ,REG_QWORD , REG_QWORD_LITTLE_ENDIAN, REG_BINARY
حالا چطوری می شه این buf که آرایه ای کاراکتری هست رو از تبدیل از هگز به رشته تبدیل کرد .

veria
دوشنبه 22 اسفند 1390, 14:40 عصر
این کلاس رو استفاده کن


#ifndef STRING_CONVERSION_INCLUDED
#define STRING_CONVERSION_INCLUDED
#pragma once

#include <windows.h>
#include <ctype.h>

namespace StrConversion
{

#define BASE16SYM ("0123456789ABCDEF")
#define BASE16VAL ("\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9:;<=>?@\xA\xB\xC\xD\xE\xF")

#define BASE16_ENCODELO(b) (BASE16SYM[((unsigned char)(b)) >> 4])
#define BASE16_ENCODEHI(b) (BASE16SYM[((unsigned char)(b)) & 0xF])

#define BASE16_DECODELO(b) (BASE16VAL[toupper(b) - '0'] << 4)
#define BASE16_DECODEHI(b) (BASE16VAL[toupper(b) - '0'])

class CStrConverter
{
public:
CStrConverter(void);
~CStrConverter(void);
void HexStrToByteArray(const char *lpHexStr, unsigned char **lppByteArray, unsigned int *lpnBuffSize);
void ByteArrayToHexStr(const unsigned char *lpByteArray, unsigned int nBuffSize, char **lppHexStr);
};

}

#endif


#include "stdafx.h"
#include "StrConversion.h"

using namespace StrConversion;

/////////////////////////////////////////////////////////////////////////////
// CStrConverter

CStrConverter::CStrConverter(void)
{
}

CStrConverter::~CStrConverter(void)
{
}

void CStrConverter::HexStrToByteArray(const char *lpHexStr, unsigned char **lppByteArray,
unsigned int *lpnBuffSize)
{
*lpnBuffSize = (unsigned int) strlen(lpHexStr) / 2;
unsigned char *lpByteArray = (unsigned char *) malloc(*lpnBuffSize);
*lppByteArray = lpByteArray;
char *lpSource = (char *) lpHexStr;

while (*lpSource != '\0')
{
lpByteArray[0] = BASE16_DECODELO(lpSource[0]);
lpByteArray[0] |= BASE16_DECODEHI(lpSource[1]);
lpByteArray++;
lpSource += 2;
}
}

void CStrConverter::ByteArrayToHexStr(const unsigned char *lpByteArray, unsigned int nBuffSize,
char **lppHexStr)
{
char *lpHexStr = (char *)malloc(nBuffSize * 2 + 1);
unsigned int nCount = 0;

*lppHexStr = lpHexStr;

while (nCount < nBuffSize)
{
lpHexStr[0] = BASE16_ENCODELO(*lpByteArray);
lpHexStr[1] = BASE16_ENCODEHI(*lpByteArray);

lpHexStr += 2;
lpByteArray++;
nCount++;
}

*lpHexStr = '\0';
}

veria
دوشنبه 22 اسفند 1390, 14:45 عصر
به عنوان مثال هم به این شکل ازش استفاده کن:

char *temp = NULL;
CStrConverter strConverter;

strConverter.ByteArrayToHexStr(adapterStat.adapt.a dapter_address,
sizeof adapterStat.adapt.adapter_address, &temp);
#ifdef UNICODE
mbstowcs(lpMacAddress, temp, dwSizeInByte / sizeof(wchar_t));
#else
strcpy_s(lpMacAddress, dwSizeInByte, temp);
#endif
free(temp);

mehdi.mousavi
دوشنبه 22 اسفند 1390, 15:06 عصر
سلام.


2. معدل #region سی شارپ در MFC چیه ؟
بهتره از region استفاده نکنید، دلیلش رو قبلا Jeff Atwood اینجا گفته (http://www.codinghorror.com/blog/2008/07/the-problem-with-code-folding.html).


3. کامپوننتی برای افزایش سرعت کار با ادیتور کد در VC++ وجود داره ، که مثل سی شارپ سرعت کد نویسی رو افزایش بده . یا کدی که باید در جای بخصوصی نوشته بشه رو از لیستش محدود تر کنه و نمایش بده .
Visual Assist X (http://www.wholetomato.com/) بهتون کمک میکنه.


4. تبدیل hex به کاراکتر چطوریه ؟ تابعی وجود داره ؟
بستگی داره منظورتون از Hex به Char دقیقا چی باشه. فرض کنید، برای تبدیل عدد 0x5a به معادل ASCII ی اون، براحتی میتونیم بدین شکل عمل کنیم:

char ch = 0x5a;

اما اگر رشته ای دارید حاوی مقادیر Hex و میخواهید اونو به معادل فرضا Long اش تبدیل کنید، میتونید بدین شکل عمل کنید:

long l = _tcstol(_T("4a3d"), NULL, 16);


مشکل ام الان این هست که data ی ولیویی رو از ریجیستری می خونم ولی اگر از نوع های زیر باشه باید اول از هگز یا باینری تبدیل به رشته بشه بعد نمایش داده بشه .
نمیدونم اطلاعات رو چطوری در Registry نوشته اید یا از اون میخونید، اما برای اطمینان اینو بگم که کلاسی تحت عنوان CRegKey در MFC وجود داره که بهتون امکان کار کردن با Registry رو میده (Header اش atlbase.h هستش). شما میتونید برای نگهداری رشته ای در Registry از متود SetStringValue و برای خوندنش از متود QueryStringValue استفاده کنید و طبیعتا دیگه نیازی به Convert کردن Data Type های مختلف به هم نداشته باشید.

موفق باشید.