Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > BYTE array size

Reply
Thread Tools

BYTE array size

 
 
Chunekit Pong
Guest
Posts: n/a
 
      11-20-2008
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);
 
Reply With Quote
 
 
 
 
Fred Zwarts
Guest
Posts: n/a
 
      11-20-2008
"Chunekit Pong" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)...
>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.


 
Reply With Quote
 
 
 
 
mliptak
Guest
Posts: n/a
 
      11-20-2008
On Nov 20, 8:27*am, Chunekit Pong <(E-Mail Removed)> 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.
 
Reply With Quote
 
Chunekit Pong
Guest
Posts: n/a
 
      11-20-2008
On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <(E-Mail Removed)>
wrote:

>"Chunekit Pong" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)...
>>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
);
 
Reply With Quote
 
Fred Zwarts
Guest
Posts: n/a
 
      11-20-2008
"Chunekit Pong" <(E-Mail Removed)> wrote in message news(E-Mail Removed)...
> On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <(E-Mail Removed)>
> wrote:
>
>>"Chunekit Pong" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)...
>>>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.
 
Reply With Quote
 
Tonni Tielens
Guest
Posts: n/a
 
      11-20-2008
On Nov 20, 9:25*am, Chunekit Pong <(E-Mail Removed)> 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.
 
Reply With Quote
 
Rolf Magnus
Guest
Posts: n/a
 
      11-20-2008
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.

 
Reply With Quote
 
James Kanze
Guest
Posts: n/a
 
      11-20-2008
On Nov 20, 12:47 pm, Tonni Tielens <(E-Mail Removed)> wrote:
> On Nov 20, 9:25 am, Chunekit Pong <(E-Mail Removed)> 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:(E-Mail Removed)
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
 
Reply With Quote
 
James Kanze
Guest
Posts: n/a
 
      11-20-2008
On Nov 20, 8:27 am, Chunekit Pong <(E-Mail Removed)> 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:(E-Mail Removed)
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
 
Reply With Quote
 
zr
Guest
Posts: n/a
 
      11-20-2008
On Nov 20, 10:25*am, Chunekit Pong <(E-Mail Removed)> wrote:
> On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <(E-Mail Removed)>
> wrote:
>
>
>
> >"Chunekit Pong" <(E-Mail Removed)> wrote in messagenews:f54ai4l6o3hdj8k2j0as78nhm0166ndt4r@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.

>
> 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();
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
convert form byte[4] to Int32 while retaining the binary value of the byte array jeff@foundrymusic.com C++ 20 09-07-2009 08:54 PM
Re: how to extend a byte[] array with a null byte? Tom McGlynn Java 4 04-18-2008 11:49 PM
Re: how to extend a byte[] array with a null byte? Patricia Shanahan Java 0 04-17-2008 06:47 PM
Converting a Primative byte array to a Byte array object Kirby Java 3 10-08-2004 03:01 AM
Appending byte[] to another byte[] array Bharat Bhushan Java 15 08-05-2003 07:52 PM



Advertisments