Page 1 of 1

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

Posted: Wed 14/01/2009 4:49 am
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

  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

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

Posted: Fri 13/03/2009 10:32 am
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

  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