标签: unsigned-char

在 C 中使用指针反转字符串(必须使用 unsigned *char)

我目前正在为 Uni 工作。

任务是在单独的函数中反转字符串。函数名是这样给出的:

void string_rev(unsigned char *str);

我的解决方案如下所示:

void string_rev(unsigned char *str){

    int length = 0;
    int counter = 0;
    unsigned char *endptr = str;   

    for (int i = 0; str[i] != '\0'; i++)  //getting length of string
        length++;

    for (int i = 0; i < length; i++)     //putting endptr to end of string
        endptr++;

    while (counter < length/2){      //switch values from start to end until half of string
        char temp = *str;
        *str = *endptr;
        *endptr = temp; …
Run Code Online (Sandbox Code Playgroud)

c string pointers unsigned-char

0
推荐指数
1
解决办法
200
查看次数

当数据类型为 unsigned char 时 scanf 的行为存在问题

所以我不知道为什么会观察到这种行为:

#include <stdio.h>

int main()
{
    unsigned char c;
    char d;
    scanf("%hhu", &d);
    printf("%c\n", d);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我没记错的话%hhu是为了unsigned char。如果我输入几乎任何字符,例如a, 或者b答案是什么都没有并d获取值0。但如果我输入97然后d打印该值a(因此 ASCII 会转换为字符)。当数据类型为 时,情况显然并非如此char。我可以直接输入字符并存储它。

也在这段代码中稍加修改

#include <stdio.h>

int main()
{
    unsigned char c;
    char d;
    int g;
    scanf("%hhu", &d);
    printf("%c\n", d);
    scanf("%d", &g);
    printf("%d is g\n", g);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我将第一个输入作为字符,例如wora那么它只会跳过第二个输入scanf,但如果输入是数字,那么它会正常工作。

c scanf unsigned-char

0
推荐指数
1
解决办法
605
查看次数

reinterpret_cast指向char和unsigned char之间的指针陷阱?

我正在使用以下函数来创建UUID并将其以人类可读的形式写入预先分配的缓冲区.出了点问题.

void createUUID(char* pDst)
{
    UUID    lUUIDObj;
    UuidCreate(&lUUIDObj);
    unsigned char*  lDest = reinterpret_cast<unsigned char*>(pDst);
    UuidToStringA(&lUUIDObj, &lDest)
}
Run Code Online (Sandbox Code Playgroud)

在方法结束时,调试器说:

  • lDest = 0x01fe4fd8"df4a5ed8-c0d2-495a-84d7-ce0e07cf2113"
  • pDst = 0x0012ec7c"在"Ì"或"Ì"

我认为两者都有相同的内容,但事实并非如此.

发生了什么?谢谢.

c++ uuid char unsigned-char reinterpret-cast

-1
推荐指数
1
解决办法
574
查看次数

c ++ unsigned char内存副本

我需要将unsigned char数组从一个方法传递给另一个方法,我尝试使用此代码:

{
     unsigned char *lpBuffer = new unsigned char[182];
 ReceiveSystemState(lpBuffer);

}

BOOL ReceiveSystemState(unsigned char *lpBuffer)
  {
      unsigned char strRecvBuffer[182] = { 0 };
      //strRecvBuffer construction

      memcpy(lpBuffer, strRecvBuffer, sizeof(strRecvBuffer));

      return TRUE;
 }
Run Code Online (Sandbox Code Playgroud)

这三种方法(用于ReceiveSystemState)都没有像我预期的那样工作.在使用它们中的每一个之后,它被复制的所有内容都是来自的第一个字符strRecvBuffer,仅此而已.的strRecvBuffer具有从单元到单元空字符,但我需要那些,因为它们是,因为该字符串是从一个硬件设备的消息和该消息将使用的协议来anallysed.我在这里想念什么?我初始化lpBuffer错了吗?

编辑:我用一种简单的memcpy方法来完成这项工作.结果仍然相同:它被复制的全部是第一个字符strRecvBuffer.

EDIT2:工作代码:

{
     unsigned char *lpBuffer = new unsigned char[182];
     ReceiveSystemState(lpBuffer);
     for (int i = 0; i < 144; i++)
     {
         memcpy(&c_dateKG[i], lpBuffer + i * sizeof(unsigned char), sizeof(unsigned char) );
     }

}    
  BOOL ReceiveSystemState(unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ arrays unsigned-char

-2
推荐指数
1
解决办法
1万
查看次数

如何对具有非标准二进制表示的数字进行算术运算?

使用unsigned char,您可以存储0到255之间的数字

255(b10)= 11111111(b2)<=那是1个字节

这样可以轻松地执行+, - ,*等操作...

现在怎么样:

255(b10)= 10101101(b2)

使用此方法可以使用unsigned char 表示最多399个

399(b10)= 11111111(b2)

有人可以提出一种算法来使用最后一种方法进行加法吗?

c++ range unsigned-char

-4
推荐指数
1
解决办法
178
查看次数

标签 统计

unsigned-char ×5

c++ ×3

c ×2

arrays ×1

char ×1

pointers ×1

range ×1

reinterpret-cast ×1

scanf ×1

string ×1

uuid ×1