Tách số Long ra byte và ứng dụng

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
Post Reply
User avatar
truongphu
VIP
VIP
Posts: 4780
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

Tách số Long ra byte và ứng dụng

Post by truongphu »

Thủ thuật: Tách số Long ra byte và ứng dụng
Tác giả: truongphu
Mô tả: Tách số Long ra byte và ứng dụng
Số Long được dựng trên 4 byte. Vậy mỗi số Long cụ thể thì các byte sẽ là bao nhiêu?
Ví dụ Có số Long = 56456645. Thực hiện tách

A- Cách 1: Dùng CopyMemory

Code: Select all

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long) Private Sub Command1_Click()Dim m(3) As ByteCopyMemory m(0), 56456645, 4For i = 0 To 3a = a & "Byte(" & i & ") = " & m(i) & vbCrLfNextMsgBox aEnd Sub
B- Cách 2 : Dùng Lset

Code: Select all

Private Type typByteArr    ByteArray(3) As ByteEnd TypePrivate Type typLong    lng As LongEnd Type Private Sub Command2_Click()Dim Arr As typByteArr, L As typLong    L.lng = 56456645    LSet Arr = L    Dim I%, S As String    For I = 0 To 3        S = S & vbCrLf & "Byte " & I & " is " & Arr.ByteArray(I)    Next    MsgBox SEnd Sub
C- Ứng dụng:
Màu sắc trong hệ màu RGB là một số Long. Tối đa là 16777215 là màu trắng (255, 255, 255), 0 là màu đen (0, 0, 0)
Để tìm nhanh các yếu tố RGB, ta dùng các cách trên:
vd Dùng CopyMemory tìm màu có số Long là 156645:

Code: Select all

Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)Private Sub Form_Load() Dim m(2) As ByteCopyMemory m(0), 156645, 3MsgBox "R: " & m(0) & " G: " & m(1) & " B: " & m(2)End Sub 
Ghi chú: Ta có thể tách cả số Double với bài viết trên
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
User avatar
truongphu
VIP
VIP
Posts: 4780
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 525 times

Tìm tất cả các số có 3 chữ số ...

Post by truongphu »

bugatino T.Tư 11/03/2009 7:08 pm wrote:Tìm tất cả các số có 3 chữ số "abc" sao cho bình phương số ở giữa (b^2) bằng tích của 2 số đứng ở bên cạnh (a*c)! Mọi người giúp với, minh không nghĩ ra được cách giải bài này!

Code: Select all

Private Sub Command1_Click()For i = 1 To 9    For u = 1 To 9        If ((i * i) Mod u) = 0 Then            If ((i * i) / u) < 10 And u < 10 Then            List1.AddItem (i * i) / u & "  " & i & "  " & u        End If: End If    NextNextEnd Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Post Reply

Return to “[VB] Mẹo vặt khác”