+ Start a Discussion

Blob as an array of bytes?

Is it possible to view the value of individual bytes in a blob? We are trying to store a series of values within a blob and then reference them by looking at a range of bytes in that blob. Any ideas? Thanks, Barry

You can't see a blob as bytes, but you can use EncodingUtil.base64encode on the Blob to convert it to a string of ASCII-characters that represent binary bytes (see Base64 (Wikipedia) ) for details. With some effort, you can isolate the bytes in question, convert them to binary bytes, and do whatever else you want to do.


Hi sfdcfox,


Can you show how to extract individual bytes from base64encoded Blob? I have a requirement where I need to process the bytes in this Blob in a particular style to generate a key




I needed to do this, so I created the following code:
// Converts a base64 string into a list of integers representing the encoded bytes
    public static List<Integer> B64ToBytes (String sIn) {
        Map<Integer,Integer> base64 = new Map<Integer,Integer>{65=>0,66=>1,67=>2,68=>3,69=>4,70=>5,71=>6,72=>7,73=>8,74=>9,75=>10,76=>11,77=>12,78=>13,79=>14,80=>15,81=>16,82=>17,83=>18,84=>19,85=>20,86=>21,87=>22,88=>23,89=>24,90=>25,97=>26,98=>27,99=>28,100=>29,101=>30,102=>31,103=>32,104=>33,105=>34,106=>35,107=>36,108=>37,109=>38,110=>39,111=>40,112=>41,113=>42,114=>43,115=>44,116=>45,117=>46,118=>47,119=>48,120=>49,121=>50,122=>51,48=>52,49=>53,50=>54,51=>55,52=>56,53=>57,54=>58,55=>59,56=>60,57=>61,43=>62,47=>63};

        List<Integer> lstOut = new List<Integer>();
        if ( sIn == null || sIn == '' ) return lstOut;
        sIn += '='.repeat( 4 - Math.mod( sIn.length(), 4) );

        for ( Integer idx=0; idx < sIn.length(); idx += 4 ) {
            if ( base64.get(sIn.charAt(idx+1)) != null ) lstOut.add( (base64.get(sIn.charAt(idx)) << 2) | (base64.get(sIn.charAt(idx+1)) >>> 4) );
            if ( base64.get(sIn.charAt(idx+2)) != null ) lstOut.add( ((base64.get(sIn.charAt(idx+1)) & 15)<<4) | (base64.get(sIn.charAt(idx+2)) >>> 2) );
            if ( base64.get(sIn.charAt(idx+3)) != null ) lstOut.add( ((base64.get(sIn.charAt(idx+2)) & 3)<<6) | base64.get(sIn.charAt(idx+3)) );

        System.Debug('B64ToBytes: [' + sIn + '] = ' + lstOut);
        return lstOut;

    public static List<Integer> BlobToBytes (Blob input) {
        return B64ToBytes( EncodingUtil.base64Encode(input) );

Call "BlobToBytes" with a Blob, and it returns a list of integers representing the blob's bytes.
Raja Kar 5Raja Kar 5
Does the above code holds good for any blob to bytes which is not in UTF-8 format if you convert Blob to tostring().