• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

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
User avatar
truongphu
VIP
VIP
Posts: 4764
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Wed 14/01/2009 4:49 am

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

  1. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  2.  
  3. Private Sub Command1_Click()
  4. Dim m(3) As Byte
  5. CopyMemory m(0), 56456645, 4
  6. For i = 0 To 3
  7. a = a & "Byte(" & i & ") = " & m(i) & vbCrLf
  8. Next
  9. MsgBox a
  10. End Sub


B- Cách 2 : Dùng Lset

Code: Select all

  1. Private Type typByteArr
  2.     ByteArray(3) As Byte
  3. End Type
  4. Private Type typLong
  5.     lng As Long
  6. End Type
  7.  
  8. Private Sub Command2_Click()
  9. Dim Arr As typByteArr, L As typLong
  10.     L.lng = 56456645
  11.     LSet Arr = L
  12.     Dim I%, S As String
  13.     For I = 0 To 3
  14.         S = S & vbCrLf & "Byte " & I & " is " & Arr.ByteArray(I)
  15.     Next
  16.     MsgBox S
  17. End 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

  1. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  2. Private Sub Form_Load()
  3.  
  4. Dim m(2) As Byte
  5. CopyMemory m(0), 156645, 3
  6. MsgBox "R: " & m(0) & " G: " & m(1) & " B: " & m(2)
  7. End Sub
  8.  

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: 4764
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

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

Postby truongphu » Fri 13/03/2009 10:32 am

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

  1. Private Sub Command1_Click()
  2. For i = 1 To 9
  3.     For u = 1 To 9
  4.         If ((i * i) Mod u) = 0 Then
  5.             If ((i * i) / u) < 10 And u < 10 Then
  6.             List1.AddItem (i * i) / u & "  " & i & "  " & u
  7.         End If: End If
  8.     Next
  9. Next
  10. End Sub
o0o--truongphu--o0o

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


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

Who is online

Users browsing this forum: No registered users and 0 guests