ไปที่เนื้อหา


รูปภาพ

ถามเรื่องคำสั่งใน VB ครับ


  • กรุณาลงชื่อเข้าใช้เพื่อตอบกระทู้
มี 5 โพสต์ตอบกลับกระทู้นี้

#1 wengweng

wengweng

    ซาลาเปาเนื้อ

  • Members
  • 8 โพสต์

โพสต์เมื่อ 08 May 2007 - 07:31:11 AM

ผมพยายามค้นหาแล้วแต่ก็ยังไม่เจอครับ คือ จะหา Function ที่ใช้แปลง เลข ฐาน 16 เป็น ฐาน 2 หน่ะครับ sleep.gif"

เช่น "D0" แปลงเป็น "11010000" อะไรประมาณนี้หน่ะครับ หรือว่า จะต้องเขียน function เองครับ

ขอบคุณมากๆครับ

#2 AssertionFailed

AssertionFailed

    Exclusive Member

  • Exclusive Programmer
  • 10116 โพสต์

โพสต์เมื่อ 08 May 2007 - 11:40:40 PM

น่าสนุก c++ ขอแจม

template<class T>
char* HexDigit2BinStr(char* pBuf,int nBufSize,T hex)
{
    int nChar(sizeof(hex));
    nChar<<=3;    

    assert(nChar<nBufSize);

    char* pc(&pBuf[nChar]);    
    *pc='\0';
    --pc;
    
    T tmp=hex;
    
    for(int i=0;i<nChar;i++)
    {        
        *pc=(tmp&1)?'1':'0';        
        tmp>>=1;
        --pc;
    }
    
    return pBuf;
}


ขออภัยที่ไม่ได้ช่วยอะไร แต่ผมเห็นคำถามแล้วปิ๊งไอเดีย
ที่ผมสนใจก็คือ เอ เขียนอย่างไร ให้มันทำงานเร็วที่สุด
จากที่ลองหลายๆ แบบ แล้วดูโค้ด asm หลังจากที่คอมไพล์เลอร์มันคอมไพล์เป็น exe แล้ว
ปรากฏว่า หลายๆ จุดไม่ต่างกันเลย คอมไพล์เลอร์มันฉลาดพอ ที่จะแปลงโค้ดให้ออกมาดี
แม้ว่าเราจะเขียนโค้ดที่ไม่ใช่รูปแบบที่ คอมฯ เข้าใจที่สุด
ตรงนี้จึงเป็นข้อยืนยันอย่างนึง ที่ ระดับโปร เขาแนะนำให้เขียนโค้ด
โดยคิดว่าให้คนอ่าน ไม่ใช่ให้คอมฯ อ่าน เช่น

nChar<<=3;    


หลายคนอาจสงสัย อะไรของมัน
โค้ดตรงนี้ผมต้องการหาจำนวนตัวอักษรที่ใช้แทนค่า 0 กะ 1 ของเลขฐานสอง
เนื่องจาก sizeof() คืนค่าขนาดของตัวแปร เป็น จำนวน ไบต์ และ 1 ไบต์ เท่ากัน 8 บิต หรือ 8 ตัวอักษรนั่นเอง
คนที่เริ่มเขียนโปรแกรม มักจะเขียนอย่างนี้

nChar=nChar*8;


พวกกระแดะ(เหมือนผม) จะเขียนแบบที่ยกมา
แบบทั่วไปที่คนเขียน และ ระดับโปรแนะนำ คือ

nChar*=8;


แล้วมันต่างกันอย่างไร
นั่นแหละครับที่ผมสงสัย(ที่จริงผมหายสังสัยนานละ เพราะอ่านหนังสือเจอ แต่ดูเหมือนจะยังไม่ได้พิสูจน์)
ผลที่ออกมาก็คือ ขึ้นอยู่กับประเภทของตัวแปรครับ
ถ้าเป็น ประเภท user defined type ควรเขียนแบบที่โปรแนะนำนั่นแหละครับ หรือจะเอาแบบกระแดะก็ได้ laugh.gif laugh.gif laugh.gif
(user defined type ก็เช่น class ที่เราสร้างเอง)
แต่ถ้าเป็น ประเภทพื้นฐาน พวก char,short หรือ int ไม่ต่างกันครับ
คอมไพล์เลอร์ มันฉลาดพอที่จะแปลงโค้ดออกมาดี ซึ่งทั้งสามแบบ ผมลองแล้ว ก็ได้โค้ดออกมาเหมือนกันคือ

mov         eax,dword ptr [nChar]
shl         eax,3
mov         dword ptr [nChar],eax


จะเห็นว่าแบบกระแดะ(ขออภัยที่ไม่สุภาพ) คือเขียนให้คอมฯ อ่าน และคอมไพล์เลอร์ก็คงชอบ ไม่ต้องคิดมาก
แต่อย่างที่บอก เขียนแบบให้คนอ่านหน่ะดีแล้ว ให้คอมไพล์เลอร์มันปวดหัวแทนเราดีกว่า(เหนื่อยทำไมเมื่อได้ผลเหมือนกัน)

แต่ก็มีบางกรณีนะครับ ที่คอมไพล์เลอร์ โง่กินเหมือนกัน
แทนที่จะแปลแบบนึง มันก็แปลอีกแบบนึง ตรงนี้แหละครับ ที่เขาวัดความสามารถของคอมไพล์เลอร์
เขาว่ากันว่า ของ borland ฉลาดกว่าของ ms
ผมก็พึ่งคิดได้ไม่กี่วันมานี่เอง
คืออยากเอา c++ builder มาลองเหมือนกัน แต่หาที่โหลด(ในไทย)ยังไม่เจอ

อ้อที่พูดมา มันเกี่ยวกับคุณสมบัติของ constructor กะ operator overloading ของ c++ นะครับ

ลักษณะเด่นอีกอย่างนึงของ c++ ก็คือ template ดังตัวอย่างโค้ดที่ยกมา
มันช่างทำอะไรๆ ให้ง่ายขึ้นตังเยอะ แถมมีประสิทธิภาพด้วย
(ตรงนี้เป็นโฆษณาชวนเชื่อ ให้มาสนใจ c++ โปรดใช้วิจารณญาณในการอ่าน biggrin.gif biggrin.gif biggrin.gif )

ขอบคุณที่ให้แจม ไปหละ ซะแว้บๆๆ แวบบบบบบ

#3 MasterOishi

MasterOishi

    Exclusive Member

  • Exclusive Programmer
  • 10020 โพสต์

โพสต์เมื่อ 12 May 2007 - 05:25:01 PM

Base converter for converting:

Binary to HEX, decimal, octal
HEX TO binary, decimal, octal
Decimal TO HEX, binary, octal
Octal to HEX, decimal, binary

Download

เป็น Source Code ของ Base Converter นะครับ ลองเอาไปไช้ดู

#4 MurASamA

MurASamA

    จอมยุทธใหม่

  • Members
  • 2 โพสต์

โพสต์เมื่อ 26 February 2008 - 07:28:43 PM

QUOTE(MasterOishi @ May 12 2007, 05:25 PM) ดูโพสต์

Base converter for converting:

Binary to HEX, decimal, octal
HEX TO binary, decimal, octal
Decimal TO HEX, binary, octal
Octal to HEX, decimal, binary

Download

เป็น Source Code ของ Base Converter นะครับ ลองเอาไปไช้ดู

ขอบคุณมากครับสำหรับโปรแกรมครับ

#5 goodwideza

goodwideza

    จอมยุทธใหม่

  • Members
  • 4 โพสต์

โพสต์เมื่อ 10 April 2008 - 09:11:22 AM

VB นะครับ Asc2Hex

Public Function SP_Asc2Hex(ByVal strAscii As String) As String
Dim i As Integer
Dim strHexTmp As String

For i = 1 To Len(strAscii)
strHexTmp = strHexTmp & Right$("00" & Hex(Asc(Mid$(strAscii, i, 1))), 2)
Next
SP_Asc2Hex = strHexTmp
End Function
QUOTE
Asc2Hex



#6 goodwideza

goodwideza

    จอมยุทธใหม่

  • Members
  • 4 โพสต์

โพสต์เมื่อ 10 April 2008 - 09:23:31 AM

Public Function SP_Dec2Hex(ByVal Num As Long, ByVal Size As Integer) As String
On Error GoTo OnError
SP_Dec2Hex = Right$(String$(Size, "0") & Hex(Num), Size)
Exit Function
OnError:
Call SP_eErr(Err)
End Function




0 สมาชิกกำลังอ่านกระทู้นี้

0 สมาชิก, 0 ผู้เยี่ยมชม, 0 ผู้ใช้งานที่ซ่อนตัว