unsigned long from string

i tried this

unsigned long A = atol(str.c_str());

it is still converting till 2,147,483,647 which is the upper limit of long data type. so just declaring a unsigned would only change the data type of the number stored in A but would not convert a number which is larger than
2,147,483,647.

still looking for converting a string with digits greater than 2,147,483,647 and less than 4,294,967,295 to unsigned long which actually increases the capacity of a number per say.

my observation thought i should share.