BYTE array size

Discussion in 'C++' started by Chunekit Pong, Nov 20, 2008.

  1. I have a BYTE array -
    BYTE const* pbBinary

    I would like to know how many bytes in that byte array

    but if I do - sizeof(* pbBinary); - then I got 1
    but if I do - sizeof( pbBinary); - then I got 4

    I am sure the array has hundreds of bytes

    how can I do that?

    ======================

    BYTE const* pbBinary = &bytes[0];
    int size = sizeof( pbBinary);
    Chunekit Pong, Nov 20, 2008
    #1
    1. Advertising

  2. Chunekit Pong

    Fred Zwarts Guest

    "Chunekit Pong" <> wrote in message news:...
    >I have a BYTE array -
    > BYTE const* pbBinary


    You don't have a BYTE array, you have a pointer to BYTE.
    (What is a BYTE?)

    >
    > I would like to know how many bytes in that byte array
    >
    > but if I do - sizeof(* pbBinary); - then I got 1
    > but if I do - sizeof( pbBinary); - then I got 4
    >
    > I am sure the array has hundreds of bytes
    >
    > how can I do that?


    Without other information you can't.
    Fred Zwarts, Nov 20, 2008
    #2
    1. Advertising

  3. Chunekit Pong

    mliptak Guest

    On Nov 20, 8:27 am, Chunekit Pong <> wrote:
    > I have a BYTE array  -
    > BYTE const* pbBinary
    >
    > I would like to know how many bytes in that byte array
    >
    > but if I do -  sizeof(* pbBinary);  - then I got 1
    > but if I do - sizeof( pbBinary); - then I got 4
    >
    > I am sure the array has hundreds of bytes
    >


    pbBinary is just a pointer.. it does not store the information about
    number of bytes/elements it points to
    if you care about the size of an "array", use std::vector<> instead.
    m.
    mliptak, Nov 20, 2008
    #3
  4. On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <>
    wrote:

    >"Chunekit Pong" <> wrote in message news:...
    >>I have a BYTE array -
    >> BYTE const* pbBinary

    >
    >You don't have a BYTE array, you have a pointer to BYTE.
    >(What is a BYTE?)
    >
    >>
    >> I would like to know how many bytes in that byte array
    >>
    >> but if I do - sizeof(* pbBinary); - then I got 1
    >> but if I do - sizeof( pbBinary); - then I got 4
    >>
    >> I am sure the array has hundreds of bytes
    >>
    >> how can I do that?

    >
    >Without other information you can't.
    >


    The whole code is like this - the purpose is to convert binary file
    into a Base64 string
    =================
    typedef unsigned char BYTE;
    std::ifstream file1("c:/test2.png");

    // read from test2.png into BYTE array
    std::vector<BYTE> bytes(
    (std::istreambuf_iterator<char>(file1))
    , (std::istreambuf_iterator<char>())
    );
    if(bytes.empty())
    ; // no bytes have been read

    BYTE const* pbBinary = &bytes[0];
    int size = sizeof(pbBinary);

    unsigned long ulEncLen = 0;
    char *pEncOut = NULL;

    BOOL fRet = ::CryptBinaryToString( pbBinary, size,
    CRYPT_STRING_BASE64, pEncOut, &ulEncLen );
    ====================
    BOOL WINAPI CryptBinaryToString(
    __in const BYTE *pbBinary,
    __in DWORD cbBinary,
    __in DWORD dwFlags,
    __out_opt LPTSTR pszString,
    __inout DWORD *pcchString
    );
    Chunekit Pong, Nov 20, 2008
    #4
  5. Chunekit Pong

    Fred Zwarts Guest

    "Chunekit Pong" <> wrote in message news:eek:...
    > On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <>
    > wrote:
    >
    >>"Chunekit Pong" <> wrote in message news:...
    >>>I have a BYTE array -
    >>> BYTE const* pbBinary

    >>
    >>You don't have a BYTE array, you have a pointer to BYTE.
    >>(What is a BYTE?)
    >>
    >>>
    >>> I would like to know how many bytes in that byte array
    >>>
    >>> but if I do - sizeof(* pbBinary); - then I got 1
    >>> but if I do - sizeof( pbBinary); - then I got 4
    >>>
    >>> I am sure the array has hundreds of bytes
    >>>
    >>> how can I do that?

    >>
    >>Without other information you can't.
    >>

    >
    > The whole code is like this - the purpose is to convert binary file
    > into a Base64 string
    > =================
    > typedef unsigned char BYTE;
    > std::ifstream file1("c:/test2.png");
    >
    > // read from test2.png into BYTE array
    > std::vector<BYTE> bytes(
    > (std::istreambuf_iterator<char>(file1))
    > , (std::istreambuf_iterator<char>())
    > );
    > if(bytes.empty())
    > ; // no bytes have been read
    >
    > BYTE const* pbBinary = &bytes[0];
    > int size = sizeof(pbBinary);


    bytes.size () gives you the size of the vector.
    Fred Zwarts, Nov 20, 2008
    #5
  6. On Nov 20, 9:25 am, Chunekit Pong <> wrote:
    > The whole code is like this - the purpose is to convert binary file


    You cannot get the size of an array, by doing sizeof on a pointer to
    an external array. Only if the pointer is in fact declared as a
    statically dimensioned array (eg. BYTE pbBinary[10]) you can get the
    size of the array by doing sizeof(pbBinary). In your case you are in
    the same scope, but still pbBinary is considered as a pointer to a
    dynamically allocated or external array. Note that sizeof is
    calculated compile time, and when you declare a pointer to an array,
    the compiler CANNOT know what the size of the array will be to what
    the pointer will point at runtime.
    Tonni Tielens, Nov 20, 2008
    #6
  7. Chunekit Pong

    Rolf Magnus Guest

    Chunekit Pong wrote:

    > I have a BYTE array -
    > BYTE const* pbBinary
    >
    > I would like to know how many bytes in that byte array
    >
    > but if I do - sizeof(* pbBinary); - then I got 1


    Well, *pbBinary is a BYTE, so you get the size of a BYTE.

    > but if I do - sizeof( pbBinary); - then I got 4


    pbBinary is a pointer to const BYTE, so you get the size of a pointer to
    const BYTE.

    > I am sure the array has hundreds of bytes
    >
    > how can I do that?


    You can't, unless the array contains some end marker that you can use to find
    out.
    Rolf Magnus, Nov 20, 2008
    #7
  8. Chunekit Pong

    James Kanze Guest

    On Nov 20, 12:47 pm, Tonni Tielens <> wrote:
    > On Nov 20, 9:25 am, Chunekit Pong <> wrote:


    > > The whole code is like this - the purpose is to convert
    > > binary file


    > You cannot get the size of an array, by doing sizeof on a
    > pointer to an external array.


    I know what you mean, but you really should say that you can't
    get the size of an array given a pointer to its first element.
    (Pointers to arrays, i.e. BYTE (*p)[ 200 ], exist, and in such
    cases, sizeof( *p ) would be useful. But they aren't very
    idiomatic.)

    > Only if the pointer is in fact declared as a statically
    > dimensioned array (eg. BYTE pbBinary[10]) you can get the size
    > of the array by doing sizeof(pbBinary).


    If something is declared as an array, it's not a pointer.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
    James Kanze, Nov 20, 2008
    #8
  9. Chunekit Pong

    James Kanze Guest

    On Nov 20, 8:27 am, Chunekit Pong <> wrote:
    > I have a BYTE array -
    > BYTE const* pbBinary


    > I would like to know how many bytes in that byte array


    > but if I do - sizeof(* pbBinary); - then I got 1
    > but if I do - sizeof( pbBinary); - then I got 4


    > I am sure the array has hundreds of bytes


    Ask whoever created the array to tell you. Once the array has
    been converted to a pointer to the first element, all
    information concerning the size has been lost.

    A better solution might be to use std::vector.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
    James Kanze, Nov 20, 2008
    #9
  10. Chunekit Pong

    zr Guest

    On Nov 20, 10:25 am, Chunekit Pong <> wrote:
    > On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <>
    > wrote:
    >
    >
    >
    > >"Chunekit Pong" <> wrote in messagenews:...
    > >>I have a BYTE array  -
    > >> BYTE const* pbBinary

    >
    > >You don't have a BYTE array, you have a pointer to BYTE.
    > >(What is a BYTE?)

    >
    > >> I would like to know how many bytes in that byte array

    >
    > >> but if I do -  sizeof(* pbBinary);  - then I got 1
    > >> but if I do - sizeof( pbBinary); - then I got 4

    >
    > >> I am sure the array has hundreds of bytes

    >
    > >> how can I do that?

    >
    > >Without other information you can't.

    >
    > The whole code is like this - the purpose is to convert binary file
    > into a Base64 string
    > =================
    >                 typedef unsigned char BYTE;
    >                 std::ifstream file1("c:/test2.png");
    >
    >                 // read from test2.png into BYTE array
    >                 std::vector<BYTE> bytes(
    >                         (std::istreambuf_iterator<char>(file1))
    >                         , (std::istreambuf_iterator<char>())
    >                         );
    >                 if(bytes.empty())
    >                         ; // no bytes have been read
    >
    >                 BYTE const* pbBinary = &bytes[0];
    >                 int size = sizeof(pbBinary);
    >
    >                 unsigned long ulEncLen = 0;
    >                 char *pEncOut = NULL;
    >
    >                 BOOL fRet = ::CryptBinaryToString( pbBinary, size,
    > CRYPT_STRING_BASE64, pEncOut, &ulEncLen );
    > ====================
    > BOOL WINAPI CryptBinaryToString(
    >   __in       const BYTE *pbBinary,
    >   __in       DWORD cbBinary,
    >   __in       DWORD dwFlags,
    >   __out_opt  LPTSTR pszString,
    >   __inout    DWORD *pcchString
    > );


    The previous posters have explained the problem. A possible fix to
    your program:

    Instead of:
    int size = sizeof(pbBinary);
    Try:
    int size = bytes.size();
    zr, Nov 20, 2008
    #10
  11. Chunekit Pong

    Andre Kostur Guest

    Chunekit Pong <> wrote in
    news:eek::

    > On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <>
    > wrote:
    >
    >>"Chunekit Pong" <> wrote in message
    >>news:...
    >>>I have a BYTE array -
    >>> BYTE const* pbBinary

    >>
    >>You don't have a BYTE array, you have a pointer to BYTE.
    >>(What is a BYTE?)
    >>
    >>>
    >>> I would like to know how many bytes in that byte array
    >>>
    >>> but if I do - sizeof(* pbBinary); - then I got 1
    >>> but if I do - sizeof( pbBinary); - then I got 4
    >>>
    >>> I am sure the array has hundreds of bytes
    >>>
    >>> how can I do that?

    >>
    >>Without other information you can't.
    >>

    >
    > The whole code is like this - the purpose is to convert binary file
    > into a Base64 string
    > =================
    > typedef unsigned char BYTE;
    > std::ifstream file1("c:/test2.png");
    >
    > // read from test2.png into BYTE array
    > std::vector<BYTE> bytes(
    > (std::istreambuf_iterator<char>(file1))
    > , (std::istreambuf_iterator<char>())
    > );
    > if(bytes.empty())
    > ; // no bytes have been read
    >
    > BYTE const* pbBinary = &bytes[0];
    > int size = sizeof(pbBinary);


    Why bother to make pbBinary and size ?

    >
    > unsigned long ulEncLen = 0;
    > char *pEncOut = NULL;
    >
    > BOOL fRet = ::CryptBinaryToString( pbBinary, size,
    > CRYPT_STRING_BASE64, pEncOut, &ulEncLen );



    Why not:

    BOOL fRet = ::CryptBinaryToString(&bytes[0], bytes.size(),
    CRYPT__STRING_BASE64, pEncOut, &ulEncLen);

    ?
    Andre Kostur, Nov 20, 2008
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Bharat Bhushan

    Appending byte[] to another byte[] array

    Bharat Bhushan, Aug 5, 2003, in forum: Java
    Replies:
    15
    Views:
    40,236
    Roedy Green
    Aug 5, 2003
  2. Kirby
    Replies:
    3
    Views:
    637
    Kirby
    Oct 8, 2004
  3. Replies:
    20
    Views:
    9,752
    licebmi
    Sep 7, 2009
  4. Tom McGlynn
    Replies:
    4
    Views:
    852
    Mark Space
    Apr 19, 2008
  5. Patricia Shanahan
    Replies:
    0
    Views:
    383
    Patricia Shanahan
    Apr 17, 2008
Loading...

Share This Page