我目前正在为 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) 所以我不知道为什么会观察到这种行为:
#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,但如果输入是数字,那么它会正常工作。
我正在使用以下函数来创建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)
在方法结束时,调试器说:
我认为两者都有相同的内容,但事实并非如此.
发生了什么?谢谢.
我需要将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) 使用unsigned char,您可以存储0到255之间的数字
255(b10)= 11111111(b2)<=那是1个字节
这样可以轻松地执行+, - ,*等操作...
现在怎么样:
255(b10)= 10101101(b2)
使用此方法可以使用unsigned char 表示最多399个?
399(b10)= 11111111(b2)
有人可以提出一种算法来使用最后一种方法进行加法吗?