将Char数组的元素复制为short

时间:2014-08-12 10:20:06

标签: c++ c

将char数组元素复制为short的最佳方法是什么?

假设我们有 -

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;`

此外,第二个选项是给出分段错误。

4 个答案:

答案 0 :(得分:0)

这似乎是一系列随机猜测。

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

可能符合您既定的目标;

答案 1 :(得分:0)

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

在1中,您正在将指针从值转换为未知区域。

你应该这样做:

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

ie:将char值转换为unsigned short,然后将其复制到whereever值指向(希望它是一个有效的指针)

编辑:你的指针的值为0 ......所以它应该是:

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

答案 2 :(得分:0)

正确的代码将显示为

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'是一个正值,两个代码片段之间没有区别。

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

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'; 

答案 3 :(得分:0)

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