Asumo que su char* name
contiene una cadena representación de la corto que desee, es decir, "15"
.
Do no inserta un char*
directamente en un tipo no puntero. Los moldes en C en realidad no modifican los datos (con algunas excepciones): simplemente le informan al compilador que desea tratar un tipo en otro tipo. Si lanza un char*
a un unsigned short
, tomará el valor del puntero (que no tiene nada que ver con el contenido), cortando todo lo que no encaja en un short
y luego descartando el resto . Esto no es absolutamente lo que quieres.
En lugar de utilizar la función std::strtoul
, que analiza una cadena y le devuelve el número equivalente:.
unsigned short number = (unsigned short) strtoul(name, NULL, 0);
(usted todavía tiene que usar un yeso, porque strtoul
devuelve un unsigned long
Este reparto es entre dos diferentes tipos enteros, sin embargo, y también lo es válida. lo peor que puede pasar es que el número dentro name
es demasiado grande para caber en un short
--una situación que se puede comprobar en otros lugares.)
¿Por qué desea almacenar el valor del puntero en un archivo en primer lugar? ¿Está tratando de usar el puntero a la cadena de caracteres como algún tipo de UID similar a una clave principal en una base de datos? Más detalles serían útiles. –
Leo un archivo binario y lo analizo, luego convierto los datos y los saco a un nuevo formato binario. También estoy trabajando con código heredado. Realmente solo necesito aprender a convertir char * a corto sin firmar. – Elpezmuerto