Determine number of bytes per element under program control
26 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Does MATLAB have the equivalent of the C/C++ 'sizeof' function?
I have some code that can run on many numeric types, and I need to be able to calculate the number of bytes per element in a given numeric array, let's call it 'A'
bytesPerElement = sizeof(class(A));
I suppose I could do something like:
w = whos(A);
bytesPerElement = w.bytes / numel(A);
but I would be surprised if there was not a function that calculates the number of bytes per element directly from the variable class. I just can't seem to find that function ... entering the wrong words into the search engine, I suppose.
0 Kommentare
Antworten (2)
dpb
am 3 Jul. 2014
No sizeof directly that I know of, no. Wouldn't be hard to build one from isa, however.
An outline would be something otoo--
function bytes = sizeof(x)
% return size in bytes of numeric entity x
bytes = (isa(x,'double') | isa(x,'int8') | isa(x,'uint8'))*8 + ...
(isa(x,'single') | isa(x,'int4') | isa(x,'uint4'))*4 + ...
...
The rest should be obvious... :)
doc isa % for the various class choices
Some checking for invalid types would be good, of course...
3 Kommentare
dpb
am 4 Jul. 2014
I tend to forget about the command form for whos ... good thought; simpler than the isa route, indeed.
Oliver Woodford
am 13 Nov. 2015
Uint8 means 8 bits, so only 1 byte. A switch on class(x) is another option.
James Tursa
am 3 Jul. 2014
There is a mex function for this, mxGetElementSize, but it doesn't do you much good at the m-file level:
Another way to do this assuming x is not empty (probably not any faster):
numel(typecast(x(1),'uint8'))
2 Kommentare
James Tursa
am 5 Jul. 2014
As requested:
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
if( nrhs ) {
plhs[0] = mxCreateDoubleScalar(mxGetElementSize(prhs[0]));
}
}
Siehe auch
Kategorien
Mehr zu Write C Functions Callable from MATLAB (MEX Files) finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!