Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

BYTE array size

50 views
Skip to first unread message

Chunekit Pong

unread,
Nov 20, 2008, 2:27:16 AM11/20/08
to
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);

Fred Zwarts

unread,
Nov 20, 2008, 2:46:12 AM11/20/08
to
"Chunekit Pong" <worlm...@yahoo.com> wrote in message news:f54ai4l6o3hdj8k2j...@4ax.com...

>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.


mliptak

unread,
Nov 20, 2008, 3:14:02 AM11/20/08
to
On Nov 20, 8:27 am, Chunekit Pong <worlman...@yahoo.com> 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.

Chunekit Pong

unread,
Nov 20, 2008, 3:25:15 AM11/20/08
to
On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <F.Zw...@KVI.nl>
wrote:

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
);

Fred Zwarts

unread,
Nov 20, 2008, 4:14:17 AM11/20/08
to
"Chunekit Pong" <worlm...@yahoo.com> wrote in message news:ok7ai4hn1aifrcput...@4ax.com...

bytes.size () gives you the size of the vector.

Tonni Tielens

unread,
Nov 20, 2008, 6:47:43 AM11/20/08
to
On Nov 20, 9:25 am, Chunekit Pong <worlman...@yahoo.com> 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.

Rolf Magnus

unread,
Nov 20, 2008, 8:28:35 AM11/20/08
to
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.

James Kanze

unread,
Nov 20, 2008, 8:47:35 AM11/20/08
to
On Nov 20, 12:47 pm, Tonni Tielens <tonnitiel...@gmail.com> wrote:
> On Nov 20, 9:25 am, Chunekit Pong <worlman...@yahoo.com> 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:james...@gmail.com
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

unread,
Nov 20, 2008, 8:48:54 AM11/20/08
to
On Nov 20, 8:27 am, Chunekit Pong <worlman...@yahoo.com> 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.

zr

unread,
Nov 20, 2008, 9:56:12 AM11/20/08
to
On Nov 20, 10:25 am, Chunekit Pong <worlman...@yahoo.com> wrote:
> On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <F.Zwa...@KVI.nl>
> wrote:
>
>
>
> >"Chunekit Pong" <worlman...@yahoo.com> wrote in messagenews:f54ai4l6o3hdj8k2j...@4ax.com...

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

Instead of:
int size = sizeof(pbBinary);
Try:
int size = bytes.size();

Andre Kostur

unread,
Nov 20, 2008, 10:21:42 AM11/20/08
to
Chunekit Pong <worlm...@yahoo.com> wrote in
news:ok7ai4hn1aifrcput...@4ax.com:

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);

?


0 new messages