gpt4 book ai didi

c - 为什么我的 8 位指针不能正确更新?

转载 作者:太空宇宙 更新时间:2023-11-04 07:48:17 24 4
gpt4 key购买 nike

路线在这里:

我应该在完全相同的输入缓冲区中转换 ASCII 字符串,在本例中为 pt1。不幸的是,循环只执行一次,因此我的输出缓冲区只包含第一个短值。

我正在尝试将 ASCII 字符串转换为 Unicode 16 位字符串。根据说明,pt1 应该指向一个 ASCII 字符串。预期输出在此链接上。 /image/COpXl.jpg

void Convert(unsigned short *pt1) { 
// pt1 is a pointer to a null-terminated variable length ASCII string
// 0x30 0x31 0x32 0x00 (sentinel value)
unsigned char *pt2 = (unsigned char *)pt1;
unsigned char value = *pt2;
while (*pt2 != 0x00) {
value = *pt2;
*pt1 = (unsigned short)value;
pt2++;
pt1++;
}
*pt1 = 0x0000;
}

最佳答案

存在多个问题:

  • 您的转换函数不会产生对调用者可见的任何内容:您将代码点值存储到本地数组中并返回给调用者。编译器会警告您至少 pt3 已设置且未使用,但更高级的编译器会优化此函数的所有代码而不会产生副作用。
  • Convert 的 API 描述是什么?您似乎收到了一个指向 ASCII 字符串的指针,该字符串伪装成指向 unsigned short 的指针,而且似乎应该就地执行转换。如果这是实际要求,这是一个非常糟糕的主意。该函数应接收一个指向目标数组的指针,类型为 unsigned short *,一个 size_t 指定该数组的元素数量,以及一个指向源字符串的指针,类型为const char *.
  • 应该如何处理超出 ASCII 范围的字节?源字符串是否在给定代码页中编码?它是UTF-8编码的吗?该函数是否应该报告错误?

从编辑中,您似乎确认了疯狂的 API 要求。假设参数数组中有足够的空间,您应该执行从最后一个字节到第一个字节的转换,从而避免踩到自己的脚趾:

void Convert(unsigned short *pt1) { 
// pt1 is a pointer to a null-terminated variable length ASCII string
// with enough space to receive the converted value including a null terminator
unsigned char *pt2 = (unsigned char *)pt1;
size_t i;
// Compute the number of bytes
for (i = 0; pt2[i] != '\0'; i++)
continue;
// Convert the contents from right to left
// Assuming ISO8859-1 encoding for bytes outside the ASCII range
for (;;) {
pt1[i] = (unsigned short)pt2[i];
if (i-- == 0)
break;
}
}

关于c - 为什么我的 8 位指针不能正确更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545726/

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