将Char数组中的元素复制到short中

Copying element of Char array into short

本文关键字:复制 short 元素 Char 数组      更新时间:2023-10-16

哪是最好的方式来复制字符数组元素到短?

假设有-

char arr[5] = {'1','2','3','4','5'};
unsigned short *value = 0;

1) *value = (unsigned short*) arr[4];

2) *value = *((unsigned short *) ((void *) &arr[4]));

3)取一个临时变量-
unsigned short temp;
memcpy( &temp, &arr[4], sizeof( temp) );
*value = temp;`

2和3将从数组中复制2个字节,这将导致您从char数组末尾的未知内存中复制。

在1中,你将一个指针从一个值转换到未知区域。

你应该做的是:

*value = (unsigned short) arr[4];

即:您将char值转换为unsigned short,然后将其复制到值指向的任何地方(希望它是一个有效的指针)

编辑:你的指针的值是0…所以应该是:

unsigned short value = (unsigned short) arr[4];

实际上这是未定义的行为,因为您正在将Char转换为Short并且不确定将在word中存储的第一个字节是什么。方法也将取决于端序术语。

正确的代码应该是

char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short( arr[4] );

char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short;
*value = arr[4]; 

考虑到类型char在您的系统中可以表现为signed char。所以在一般情况下,也许你需要下面的

来代替上面的语句
char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short( ( unsigned char )arr[4] );

虽然在您的示例中'5'是一个正值,并且这两个代码片段之间没有区别。

如果你想在unsigned short类型的对象中存储值5而不是'5',那么你应该写

char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short( arr[4] - '0' );

char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short;
*value = arr[4] - '0'; 

这似乎是一个随机猜测的列表。

value = &temp;
*value = arr[4];