none
Win API Copymemory 問題 RRS feed

  • 問題

  • VB6 程式碼如下:

    Dim address As Long, str As String
    str = "123456"
    Dim bytearray() As Byte
    bytearray = StrConv(str, vbFromUnicode)
    CopyMemory address, bytearray(0), 4
    Debug.Print address

    debug 輸出為875770417 請問此值為何不等於49*255^3+50*255^2+51*255+52

    我利用copymemory複製字串前四byte 存在address 變數中,但得到的結果卻不同?

     

    2006年8月22日 上午 03:32

解答

  • 0. 這是計概的東西

    1. Windows 是 little endian byte order ,所以 byte 順序是小的在前面。

    2. 應該是 256 不是 255 。

    所以 875770417 在記憶體是 31 32 33 34 (Hex) ,計算方式為:

    52 * 256 ^ 3 + 51 * 256 ^ 2 + 50 * 256 + 49

    註 1.

    big endian byte order

    Left-to-right byte ordering of an integer word. This byte-ordering method is used on many UNIX systems including Sun, Hewlett-Packard®, IBM®, and Data General AViiON®.

    little endian byte order

    Right-to-left byte ordering of an integer word. This byte-ordering method is used on many operating file systems including DEC OSF/1™, DEC OpenVMS™, MS-DOS®, and Windows NT™.

    2006年8月22日 上午 09:01
    版主

所有回覆

  • 0. 這是計概的東西

    1. Windows 是 little endian byte order ,所以 byte 順序是小的在前面。

    2. 應該是 256 不是 255 。

    所以 875770417 在記憶體是 31 32 33 34 (Hex) ,計算方式為:

    52 * 256 ^ 3 + 51 * 256 ^ 2 + 50 * 256 + 49

    註 1.

    big endian byte order

    Left-to-right byte ordering of an integer word. This byte-ordering method is used on many UNIX systems including Sun, Hewlett-Packard®, IBM®, and Data General AViiON®.

    little endian byte order

    Right-to-left byte ordering of an integer word. This byte-ordering method is used on many operating file systems including DEC OSF/1™, DEC OpenVMS™, MS-DOS®, and Windows NT™.

    2006年8月22日 上午 09:01
    版主
  • 補充:

    你可以參考:http://tlcheng.twbbs.org/TLCheng/Basic/vb/vbmath.htm

    裡面關於變數與位元組陣列轉換的一些工具函數說明及原始碼。原始碼在網頁最上方超連結點進去。

    2006年8月22日 上午 09:04
    版主