gpt4 book ai didi

将字符串转换为其十进制值,然后再转换回其字符值

转载 作者:行者123 更新时间:2023-11-30 14:49:06 26 4
gpt4 key购买 nike

unsigned long long int power(int base, unsigned int exponent)
{
if (exponent == 0)
return 1;
else
return base * power(base, exponent - 1);
}

我正在开发一个程序,需要接收 8 个字符的字符串(例如“我想要 t”),然后在 pack 函数中将其转换为 long long int。我的 pack 功能运行良好。

unsigned long long int pack(char unpack[])
{
/*converting string to long long int here
didn't post code because its large*/
}

输入“我想要 t”后,我得到“小数值 = 5269342824372117620”,然后将小数发送到解包函数。所以我需要将 5269342824372117620 转换回“我想要 t”。我尝试了位操作,但没有成功,我们将不胜感激任何帮助。

void unpack(long long int pack)
{
long long int bin;
char convert[100];

for(int i = 63, j = 0, k = 0; i >= 0; i--,j++)
{
if((pack & (1 << i)) != 0)
bin += power(2,j);

if(j % 8 == 0)
{
convert[k] = (char)bin;
bin = 0;
k++;
j = -1;
}
}
printf("String: %s\n", convert);
}

最佳答案

解决您的问题的一个简单解决方案是将字符串中的字符视为包含所有可能值的大基数中的数字。例如,base64 编码可以将 8 个字符的字符串转换为 48 位数字,但您只能在源字符串中使用最多 64 个不同字符的子集。

要将任何 8 字节字符串转换为数字,必须使用至少 256 的基数。

考虑到您的额外输入,在我输入“我想要 t”后,我得到“十进制值 = 5269342824372117620”,并且由于 5269342824372117620 == 0x492077616e742074,您确实这样做了对字符使用基数 256、大端顺序和 ASCII 编码。

这是此方法的一个简单的可移植 pack 函数:

unsigned long long pack(const char *s) {
unsigned long long x = 0;
int i;
for (i = 0; i < 8; i++) {
x = x * 256 + (unsigned char)s[i];
}
return x;
}

unpack 函数很容易推导:以相反的顺序计算除法的余数:

char *unpack(char *dest, unsigned long long x) {
/* dest is assumed to have a length of at least 9 */
int i;
for (i = 8; i-- > 0; ) {
s[i] = x % 256;
x = x / 256;
}
s[8] = '\0'; /* set the null terminator */
return s;
}

对于可能更快但可移植性较差的解决方案,您可以使用此方法,但您会在小端系统(例如当前的 Mac 和 PC)上获得不同的转换:

#include <string.h>

unsigned long long pack(const char *s) {
unsigned long long x;
memcpy(&x, s, 8);
return x;
}

char *unpack(char *s, unsigned long long x) {
memcpy(s, &x, 8);
s[8] = '\0';
return s;
}

关于将字符串转换为其十进制值,然后再转换回其字符值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49956499/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com