نمایش نتایج 1 تا 1 از 1

نام تاپیک: کلاس کمکی Write یک ویا چند بایت داده در یک آرایه چند بایتی

  1. #1

    Lightbulb کلاس کمکی Write یک ویا چند بایت داده در یک آرایه چند بایتی

    تصور کنید یک داده چندبایتی دارید وقصد دارید که یک بایت مشخص ویا چند بایت مشخص پشت سرهم در داده مورد نظر را با داده های جدید جایگزین نمایید برای اینکار از کلاس کمکی زیر استفاده نمایید.
    در صورت لازم بفرمایید توضیحات تکمیلتر ارائه کنم.


    #ifndef BYTEHELPER_H_
    #define BYTEHELPER_H_


    #define WRITE_BYTE(type,arg1,arg2) \
    ByteHelper::getInstance()->write_Byte<type>(arg1,arg2)
    #define WRITE_BYTES(arg1,arg2) \
    ByteHelper::getInstance()->write_Bytes(arg1,arg2)
    #define WRITE_BYTES2(arg1,arg2,arg3) \
    ByteHelper::getInstance()->write_Bytes(arg1,arg2,arg3)
    #define WRITE_BYTES_COPY(type,arg1,arg2,arg3,arg4) \
    ByteHelper::getInstance()->write_Bytes_Copy<type>(arg1,arg2,arg3,arg4)
    #define WRITE_BYTES_COPY2(type,arg1,arg2) \
    ByteHelper::getInstance()->write_Bytes_Copy<type>(arg1,arg2)
    #define CLEAR_BYTES(arg1) \
    ByteHelper::getInstance()->clear_Bytes(arg1)


    #include "MyException.h"
    #include <string.h>


    class ByteHelper {
    public:
    ~ByteHelper() {
    }


    //static ctor
    inline static ByteHelper* getInstance() {
    static ByteHelper* bf = new ByteHelper;
    return bf;
    }


    template<typename _R,size_t N>
    inline void* clear_Bytes(_R(&ref)[N], size_t size = 0) {
    return memset(ref, 0, size > 0 ? size : sizeof(ref));
    }


    template<typename _CAST_TYPE, typename _R, typename _T>
    inline bool write_Byte(_R* const ref, const _T& value) {
    try {
    *((_CAST_TYPE) ref) = value;
    } catch (MyException& E) {
    return false;
    }
    return true;
    }


    template<typename _CAST_TYPE, typename _R, typename _T, size_t N>
    inline bool convert_Byte(_R(&ref)[N], _T* value) {
    try {
    ref = *(reinterpret_cast<_CAST_TYPE> (value[0]));
    } catch (MyException& E) {
    return false;
    }
    return true;
    }


    template<typename _R, typename _T,size_t N>
    inline bool write_Bytes(_R(&ref)[N] /*_R* const ref*/, const _T& value, size_t size = 0) {
    try {
    memcpy(ref, value, size > 0 ? size : strlen((pbyte)value)/*sizeof(value)*/);
    } catch (MyException& E) {
    return false;
    }
    return true;
    }


    template<typename _CAST_TYPE, typename _R, typename _T>
    inline bool write_Bytes_Copy(_R* const ref, const _T& value,int fristOffset =0 , int endOffset =0) {
    try {
    int tmp_size = endOffset > 0 ? endOffset : sizeof(value);
    std::copy(value + fristOffset, value + tmp_size, (_CAST_TYPE) ref);
    } catch (MyException& E) {
    return false;
    }
    return true;
    }


    private:
    //defined private ctor! because can not create object.
    //must be create object calling static factory method getInstance();
    ByteHelper() {
    } //Default ctor


    ByteHelper(ByteHelper&) {
    }//Copy ctor


    ByteHelper& operator=(ByteHelper&) {
    return *this;
    }//Copy Assignment operator
    int a;
    };


    #endif /* BYTEHELPER_H_ */


    آخرین ویرایش به وسیله farhad_shiri_ex : سه شنبه 31 اردیبهشت 1398 در 14:57 عصر

تاپیک های مشابه

  1. خبر: دنلود کامپوننت تصاویر امنیتی با قابلیت فراوان
    نوشته شده توسط Saber_Fatholahi در بخش ASP.NET Web Forms
    پاسخ: 134
    آخرین پست: چهارشنبه 21 مرداد 1394, 11:21 صبح
  2. پاسخ: 0
    آخرین پست: شنبه 15 شهریور 1393, 19:13 عصر
  3. امنیت با تصاویر امنیتی
    نوشته شده توسط amin_sltny در بخش PHP
    پاسخ: 10
    آخرین پست: سه شنبه 03 بهمن 1391, 14:39 عصر
  4. امنیت دسترسی write
    نوشته شده توسط crazy_1892 در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: دوشنبه 02 آبان 1390, 17:54 عصر

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •