#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void getList(char *s, char ***p3, int f, int *z, int *yu)
{
int len = strlen(s);
*yu = len % f;
*z = (len + f - 1) / f;
int last = *z - 1;
char **p2 = (char **)malloc(sizeof(char *) * (*z));
*p3 = p2;
for (int i = 0; i < (*z - 1); i++)
{
char *t = (char *)malloc(f + 1);
p2[i] = t;
t[0] = s[8 * i + 6];
t[1] = s[8 * i + 7];
t[2] = s[8 * i + 4];
t[3] = s[8 * i + 5];
t[4] = s[8 * i + 2];
t[5] = s[8 * i + 3];
t[6] = s[8 * i + 0];
t[7] = s[8 * i + 1];
t[8] = 0;
}
char *t = (char *)malloc(f + 1);
p2[last] = t;
if (!*yu)
{
t[0] = s[8 * last + 6];
t[1] = s[8 * last + 7];
t[2] = s[8 * last + 4];
t[3] = s[8 * last + 5];
t[4] = s[8 * last + 2];
t[5] = s[8 * last + 3];
t[6] = s[8 * last + 0];
t[7] = s[8 * last + 1];
t[8] = 0;
}
else if (*yu == 2)
{
t[0] = s[8 * last + 0];
t[1] = s[8 * last + 1];
t[2] = 0;
}
else if (*yu == 4)
{
t[0] = s[8 * last + 2];
t[1] = s[8 * last + 3];
t[2] = s[8 * last + 0];
t[3] = s[8 * last + 1];
t[4] = 0;
}
else if (*yu == 6)
{
t[0] = s[8 * last + 4];
t[1] = s[8 * last + 5];
t[2] = s[8 * last + 2];
t[3] = s[8 * last + 3];
t[4] = s[8 * last + 0];
t[5] = s[8 * last + 1];
t[6] = 0;
}
}
int main()
{
char *s = "123456781234567812345678123456";
char **p2 = NULL;
int f = 8;
int z = 0;
int yu = 0;
getList(s, &p2, f, &z, &yu);
printf("group is %d, last numbers is %d \n", z, yu);
for (int i = 0; i < z; i++)
{
printf(" %s \n", p2[i]);
}
return 0;
}
C语言大小端翻转函数实现
最新推荐文章于 2024-07-25 20:42:47 发布