Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 10 trên tổng số 35 kết quả

Đề tài: Lập trình C | Những chương trình C Cơ bản

Threaded View

  1. #8
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Trích dẫn Nguyên bản được gửi bởi TQN
    Ở dưới là đoạn code mà tui thường dùng để đổi một số int sang chuổi hex, được viết thành 1 hàm và đã được optimize. Hàm này chạy rất nhanh, hơn các cách khác như dùng sprintf, std::string....Build và run với VC++ xx.
    Code:
    /**********************************************************************
    * Function:     Num2HexStr
    * Description:  Convert a number to a hex string
    * Parameters:   pBuf: Pointer to buffer to store the result hex string.
    *               The caller must ensure buffer have enough space to store
    *               len of hex characters and a NULL character.
    *               len: number of hex character required. The buffer will be
    *               add 0 to the left to ensure have len hex characters
    *               num: number will be converted
    * Returns:      The pointer pBuf
    **********************************************************************/
    static inline char* Num2HexStr(char *pBuf, uint len, uint num)
    {
        static const char HEXSTR[] = "0123456789ABCDEF";
    
        _ASSERTE(len > 0);
        _ASSERTE(pBuf != NULL);
        _ASSERTE(FALSE == IsBadWritePtr(pBuf, UINT_MAX));
        if ((NULL == pBuf) || (0 == len))
        {
            TRACE("IDB2SIG - %s(%d) : Invalid function input arguments.\n",
                      __FILE__, __LINE__);
            return pBuf;
        }
    
        char *p = pBuf + len;
        *p-- = '\0';
        while (p >= pBuf)
        {
            int digit = num & 0x0F;
            num >>= 4;
            *p-- = HEXSTR[digit];
        }
    
        return pBuf;
    }
    Điểm mạnh của hàm này là tốc độ và padding 0 vào đầu chuỗi trả về.
    VD: NumToHexStr(pBuf, 4, 3) => 0003
    Đoạn mã trên của bác không chạy được nếu không có MFC mặc dù bản thân của hàm không thực sự cần MFC plattform. Có 1 vấn đều đau đầu là không có MFC ta không sử dụng được các Macro như TRACE, ASSERT, VERIFY ...
    Bác biết cách nào dùng không chỉ em với?

    Hàm trên của bác chưa thực sự tối ưu, cụ thể là việc khai báo digit trong vòng lặp. Như thế mỗi lần vào vòng lặp mới sẽ phải cấp biến mới, và rõ ràng như vậy không tối ưu so với việc khai báo digit bên ngoài vòng lặp.
    Đã được chỉnh sửa lần cuối bởi Tarzan : 03-11-2006 lúc 11:31 PM.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn