1、
int intvert(unsigned int x,int p,int n)实现对x的进行转换,p为起始转化位, n为需要转换的长度,假设起始点在右边.
如x=0b0001 0001,p=4,n=3转换后x=0b0110 0001。
int intvert(unsigned int x, int p, int n)
{
unsigned int m = 0;
unsigned int a = 1;
int i = 0;
for (i = 0; i < n; i++)//生成n个1
{
m |= a;
a = a << 1;
}
m = m << p;//位移p位
x ^= m;
printf("x=0x%x\n", x);
return 0;
}
2、已知WAV文件格式如下表,打开一个WAV文件,以适当的数据结构组织WAV文件头并解析怎样获取WAV格式的各项信息。
思路:使用fopen函数打开wav文件,编写struct,其中定义头文件各类型参数及大小,使用fread函数按struct大小读取文件内容。
//伪代码
struct WAVHead
{
char RIFF;
...
}MyStruct;
FILE *p = fopen("xxx.wav", "r");
int n = fread(&MyStruct, sizeof(WAVHead), 1, p);
3、
下面这段代码是把中英文混合字符串(汉字用两个字节表示,特点是第一个字节的最高位是1)中的大写字母转化为小写字母,找出其中的bug。
for (char *piterator=sz_word; *piterator!=0; piterator++)
{
if (*piterator & 0x80 != 0)
{
piterator++;
}
else if (*piterator>=’A’ && *piterator<=’Z’)
piterator +=32;
}
for (char *piterator=sz_word; *piterator!=0; piterator++)
{
if ((*piterator) & 0x80 != 0)//*和&相同优先级,应加括号
{
piterator++;
}
else if(*piterator >='A' && *piterator<='Z')
*piterator += 32;//更改指针的内容,而不是指针本身
}