473,230 Members | 1,512 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,230 software developers and data experts.

BYTE array size

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);
Nov 20 '08 #1
10 24525
"Chunekit Pong" <wo********@yahoo.comwrote in message news:f5********************************@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.
Nov 20 '08 #2
On Nov 20, 8:27*am, Chunekit Pong <worlman...@yahoo.comwrote:
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.
Nov 20 '08 #3
On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <F.******@KVI.nl>
wrote:
>"Chunekit Pong" <wo********@yahoo.comwrote in message news:f5********************************@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<BYTEbytes(
(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
);
Nov 20 '08 #4
"Chunekit Pong" <wo********@yahoo.comwrote in message news:ok********************************@4ax.com...
On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <F.******@KVI.nl>
wrote:
>>"Chunekit Pong" <wo********@yahoo.comwrote in message news:f5********************************@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<BYTEbytes(
(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.
Nov 20 '08 #5
On Nov 20, 9:25*am, Chunekit Pong <worlman...@yahoo.comwrote:
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.
Nov 20 '08 #6
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.

Nov 20 '08 #7
On Nov 20, 12:47 pm, Tonni Tielens <tonnitiel...@gmail.comwrote:
On Nov 20, 9:25 am, Chunekit Pong <worlman...@yahoo.comwrote:
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:ja*********@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
Nov 20 '08 #8
On Nov 20, 8:27 am, Chunekit Pong <worlman...@yahoo.comwrote:
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:ja*********@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
Nov 20 '08 #9
zr
On Nov 20, 10:25*am, Chunekit Pong <worlman...@yahoo.comwrote:
On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <F.Zwa...@KVI.nl>
wrote:
"Chunekit Pong" <worlman...@yahoo.comwrote in messagenews:f5********************************@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<BYTEbytes(
* * * * * * * * * * * * (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();
Nov 20 '08 #10
Chunekit Pong <wo********@yahoo.comwrote in
news:ok********************************@4ax.com:
On Thu, 20 Nov 2008 08:46:12 +0100, "Fred Zwarts" <F.******@KVI.nl>
wrote:
>>"Chunekit Pong" <wo********@yahoo.comwrote in message
news:f5********************************@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<BYTEbytes(
(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);

?
Nov 20 '08 #11

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

11
by: Walter Dnes (delete the 'z' to get my real address | last post by:
I've noticed a few threads (full of sound and fury, signifying nothing) here recently about allocation of large memory blocks. I'm about to start on a personal pet project where I'll be using...
3
by: simonc | last post by:
Can you define a property as type Byte array of a specific length? I am trying to pass a byte array which is 3200 bytes in length from one form (in which the bytes are read from a file) to...
5
by: news.microsoft.com | last post by:
Hello, what is the most performant size for the byte array for reading/writing using 2 filestreams? example code: Dim bytearrayinput(4095) As Byte Dim rdlen As Long = 0 Dim totlen As Long...
8
by: piggy | last post by:
I am trying to convert an image to an byte array (tobytes() method) and from byte array back to an image (frombytes() method). The problem i have here is say the image size is 285 bytes but the...
23
by: Gerrit | last post by:
Hi all, I'm getting an OutOfMemoryException when I initialize a byte array in C# like this: Byte test = new Byte; I'm using ASP.NET 2.0. In ASP.Net 1.1 it works fine. So what am I doing...
1
by: | last post by:
Hi all, I am writing a sendmail milter application in Java. The incoming mails will usually have image file as attachments. My application is currently able to extract the ImageFile and save it...
10
by: Scott Townsend | last post by:
So I need to talk to a devices that expects all of the bits and bytes I sent it to be in specific places (not yet 100% defined). I wanted to create a structure/class with all of the data in it...
3
by: =?Utf-8?B?SXpvcmljaA==?= | last post by:
I observed that WCF client running inside Full Trust mode XBAP application can't read byte array over 16384. If return result is bigger than that size, then client simply get null or Nothing in VB...
2
Airslash
by: Airslash | last post by:
Hello, I'm currently working with byte arrays to hold data transmitted over the network, and i'm looking for a way to copy a section of that byte array and return it from a function result. I...
0
by: VivesProcSPL | last post by:
Obviously, one of the original purposes of SQL is to make data query processing easy. The language uses many English-like terms and syntax in an effort to make it easy to learn, particularly for...
0
by: jianzs | last post by:
Introduction Cloud-native applications are conventionally identified as those designed and nurtured on cloud infrastructure. Such applications, rooted in cloud technologies, skillfully benefit from...
0
by: abbasky | last post by:
### Vandf component communication method one: data sharing ​ Vandf components can achieve data exchange through data sharing, state sharing, events, and other methods. Vandf's data exchange method...
2
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 7 Feb 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:30 (7.30PM). In this month's session, the creator of the excellent VBE...
0
by: fareedcanada | last post by:
Hello I am trying to split number on their count. suppose i have 121314151617 (12cnt) then number should be split like 12,13,14,15,16,17 and if 11314151617 (11cnt) then should be split like...
0
by: stefan129 | last post by:
Hey forum members, I'm exploring options for SSL certificates for multiple domains. Has anyone had experience with multi-domain SSL certificates? Any recommendations on reliable providers or specific...
0
Git
by: egorbl4 | last post by:
Скачал я git, хотел начать настройку, а там вылезло вот это Что это? Что мне с этим делать? ...
1
by: davi5007 | last post by:
Hi, Basically, I am trying to automate a field named TraceabilityNo into a web page from an access form. I've got the serial held in the variable strSearchString. How can I get this into the...
0
by: MeoLessi9 | last post by:
I have VirtualBox installed on Windows 11 and now I would like to install Kali on a virtual machine. However, on the official website, I see two options: "Installer images" and "Virtual machines"....

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.