How to use hard-coded keys for two parties to form key agreement using ECDH from cryptopp library?

Hi folks!.
need help here and don’t say “just google” because i have already done that. I need your help through this code, how it can be corrected to produce correct “Agreed shared secret key” which is supposed to be "1ed885b1064ae5e041cef89365eb7a63b87a6e3e59f6b3ec74c117b74c4e89a4"

The code:

#include <iostream>
using std::cout;
using std::cerr;
using std::endl;

#include <string>
using std::string;

#include <stdexcept>
using std::runtime_error;

#include <cstdlib>
using std::exit;

#include "cryptopp/osrng.h"
using CryptoPP::AutoSeededRandomPool;
using CryptoPP::AutoSeededX917RNG;

#include "cryptopp/aes.h"
using CryptoPP::AES;

#include "cryptopp/eccrypto.h"
using CryptoPP::ECP;
using CryptoPP::ECDH;

#include "cryptopp/secblock.h"
using CryptoPP::SecByteBlock;

#include "cryptopp/oids.h"
using CryptoPP::OID;

// ASN1 is a namespace, not an object
#include "cryptopp/asn.h"
using namespace CryptoPP::ASN1;

#include "cryptopp/integer.h"
using CryptoPP::Integer;

#include <cryptopp/hex.h>

int main( int, char** ) {

    OID CURVE = secp256r1();

    ECDH < ECP >::Domain dhA( CURVE ), dhB( CURVE );
    string privatekeyA = "e8586d5fa27ffb6a37817c171c94189ad20d8fcf29fa58ba0e6cbe4cf2bb1079";
    string publickeyB = "4f0609f35a0be01caa1287862680b803ea50fb66af2ad65e990aa4a8944c6191ac0d13d98612e12ba1d9afa86f997aab2827a0cee43bf963e8e995eb95df2fb33";

    SecByteBlock privA(dhA.PrivateKeyLength());
    SecByteBlock pubB(dhB.PublicKeyLength());  
    string Prkey, Pukey;
    unsigned char privateky[32];
    unsigned char publicky[64];

    CryptoPP::StringSource ssk(privatekeyA, true ,
        new CryptoPP::HexDecoder(
            new CryptoPP::StringSink(Prkey)

    CryptoPP::StringSource ssv(publickeyB, true ,
        new CryptoPP::HexDecoder(
            new CryptoPP::StringSink(Pukey)

    for(int i=0;i<32;i++) {
		    if (Prkey[i]<0) privateky[i]=Prkey[i]+256;
		    else privateky[i]=Prkey[i];

    for(int i=0;i<64;i++) {
		    if (Pukey[i]<0) publicky[i]=Pukey[i]+256;
		    else publicky[i]=Pukey[i];
    privA.Assign(privateky, sizeof(privateky));
    pubB.Assign(publicky, sizeof(publicky));

    SecByteBlock sharedA(dhA.AgreedValueLength());

    dhA.Agree(sharedA, privA, pubB);

    Integer a;

    a.Decode(sharedA.BytePtr(), sharedA.SizeInBytes());
    cout << "Agreed to shared secret: " << std::hex << a << endl;

    return 0;

The output of this code is wrong. Am just playing around to understand the concept so any help even in comments will be highly appreciated.