[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

BYTE array size

Chunekit Pong

11/20/2008 7:27:00 AM

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

Angela Gupta

4/3/2008 12:07:00 AM

0

In article <fsutgi0erm@drn.newsguy.com>, Trudy Johnson says...
>
>In article <fsugbf02555@drn.newsguy.com>, Angela Gupta says...
>>
>>In article <fss6dq0l4v@drn.newsguy.com>, Trudy Johnson says...
>>>
>>>Called user fees [paid by big pharma to FDA], this $400 million a year is
>>>designed to speed decisions on applications for new drugs. "User fees seem to
>>>save taxpayers money," says Susan Wood, PhD, the former assistant commissioner
>>>for women's health at the FDA and now a professor of public health at George
>>>Washington University. "But they undermine public confidence in the FDA's
>>>independence and impose time pressures that could end up costing lives."
>>>Readers Digest, April 2008
>>>
>>>Oh, right - and we are supposed to believe that the members of the FDA have
>>>unbiased opinions about the drugs they are going to approve, huh? I think not -
>>>these guys are human and very susceptible to these user fees (or rather
>>>bribes)Who do you think is going to win here, pharma or the public?
>>>
>>>Trudy
>>>
>>"User fees", huh? I guess that's a kinder, gentler word than "bribery". The
>>FDA has been bought and paid for by the pharmaceutical industry. But it's the
>>poor sods who end up taking these dangerous drugs that pay the real price.
>>Angela
>>
>Exactly - and that is why the FDA needs to be held responsible for its actions.
>
>Trudy
>
Sure it does, and I mean the individual members should be held accountable for
all the death and injury they've contributed to by their rubber-stamping
approvals of every lethal psychiatric drugs that's put in front of them.
Angela

Trudy Johnson

4/7/2008 1:20:00 AM

0

In article <ft173e029v2@drn.newsguy.com>, Angela Gupta says...
>
>In article <fsutgi0erm@drn.newsguy.com>, Trudy Johnson says...
>>
>>In article <fsugbf02555@drn.newsguy.com>, Angela Gupta says...
>>>
>>>In article <fss6dq0l4v@drn.newsguy.com>, Trudy Johnson says...
>>>>
>>>>Called user fees [paid by big pharma to FDA], this $400 million a year is
>>>>designed to speed decisions on applications for new drugs. "User fees seem to
>>>>save taxpayers money," says Susan Wood, PhD, the former assistant commissioner
>>>>for women's health at the FDA and now a professor of public health at George
>>>>Washington University. "But they undermine public confidence in the FDA's
>>>>independence and impose time pressures that could end up costing lives."
>>>>Readers Digest, April 2008
>>>>
>>>>Oh, right - and we are supposed to believe that the members of the FDA have
>>>>unbiased opinions about the drugs they are going to approve, huh? I think not -
>>>>these guys are human and very susceptible to these user fees (or rather
>>>>bribes)Who do you think is going to win here, pharma or the public?
>>>>
>>>>Trudy
>>>>
>>>"User fees", huh? I guess that's a kinder, gentler word than "bribery". The
>>>FDA has been bought and paid for by the pharmaceutical industry. But it's the
>>>poor sods who end up taking these dangerous drugs that pay the real price.
>>>Angela
>>>
>>Exactly - and that is why the FDA needs to be held responsible for its actions.
>>
>>Trudy
>>
>Sure it does, and I mean the individual members should be held accountable for
>all the death and injury they've contributed to by their rubber-stamping
>approvals of every lethal psychiatric drugs that's put in front of them.
>Angela
>
Oh yes! Maybe if they had this to confront, they wouldn't be so "stamp" happy.
Trudy

Fred Zwarts

11/20/2008 7:46:00 AM

0

"Chunekit Pong" <worlman385@yahoo.com> wrote in message news: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.


miso.liptak

11/20/2008 8:14:00 AM

0

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

11/20/2008 8:25:00 AM

0

On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <F.Zwarts@KVI.nl>
wrote:

>"Chunekit Pong" <worlman385@yahoo.com> wrote in message news: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
);

Fred Zwarts

11/20/2008 9:14:00 AM

0

"Chunekit Pong" <worlman385@yahoo.com> wrote in message news:ok7ai4hn1aifrcput99okpvvoricqu7qsa@4ax.com...
> On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <F.Zwarts@KVI.nl>
> wrote:
>
>>"Chunekit Pong" <worlman385@yahoo.com> wrote in message news: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);

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

Tonni Tielens

11/20/2008 11:48:00 AM

0

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

11/20/2008 1:29:00 PM

0

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

11/20/2008 1:48:00 PM

0

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

11/20/2008 1:49:00 PM

0

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.

--
James Kanze (GABI Software) email:james.kanze@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