memset字节而不是整数(4字节)

时间:2015-11-13 13:50:27

标签: c memset

我很难找到答案:

#define BUFLEN 8
unsigned short randombuffer[BUFLEN];    
memset(randombuffer, 200 , BUFLEN );
printf("%u", randombuffer[0]);

我得到的回答为51400,尽管我期待200。 经过调试后,我发现randombuffer的前8个条目填充了0xC8。因此0xC8C8是51400.然而,我期待数组中每个索引的0x00C8。 我做错了什么?

3 个答案:

答案 0 :(得分:2)

你做错了不是读取memset的规格。 memset将每个字节设置为指定值。您的缓冲区很可能是8个条目,每个条目两个字节。由于您将8传递给memset,因此前四个条目的两个字节都会更改,其余的不会被触及。那是memset的作品。

答案 1 :(得分:1)

memset填充字节,但看起来你想要填充单词。我不知道是否内置了类似memset的功能,因此您可能需要重复memset / memcpy。请注意,如果您觉得编写内联汇编程序很舒服,那么您可以在机器代码中非常有效地执行此操作 - 尽管在C中使用指针的紧密循环可能接近于快。

答案 2 :(得分:-4)

memset调用中的大小计算不正确。它应该是:

memset(randombuffer, 200 , BUFLEN * sizeof(*randombuffer) );

因为randombuffer中的各个元素在你的情况下是两个字节而memset中的第三个参数占用了对象的字节数,所以你必须传递对象中元素的数量乘以它们的大小(以字节为单位)。

元素中的值仍将保持为0xC8C8,因为memset设置每个字节的值而不是每个元素。

要正确打印出来,请使用short的正确说明符:

printf("%hu", randombuffer[0]);

printf("%hx", randombuffer[0]);