以十六进制值的形式返回无符号字符
Return unsigned char as a hex value
我的目标是能够将无符号字符作为十六进制值返回,这样我就可以将值从客户端传递到服务器端。
如何在尝试转换为十六进制之前生成我的数据:
unsigned char *TestClass::GetKey()
{
// Generate a key of length 32 bytes
memset(this->szKey, 0, 32);
RAND_bytes(this->szKey, 32);
return this->szKey;
}
这就是我目前所拥有的:
TestClass myTestClass;
void CJSCallDoc::OnDocumentComplete(LPCTSTR strURL,LPDISPATCH pDisp)
{
unsigned char szKey = hex_print(myTestClass.GetKey());
}
unsigned char CJSCallDoc::hex_print(unsigned char* pv)
{
unsigned char *p = pv;
if (NULL == pv)
{
return NULL;
}
else
{
char storedString[256];
size_t len = strlen((const char*)pv);
size_t i = 0;
for (; i < len; ++i)
{
strcpy_s(storedString, 256, "Test");
strcat_s(storedString, reinterpret_cast<char*>(*p++));
}
return *storedString;
}
}
我遇到的问题是这条线:
strcat_s(storedString, reinterpret_cast<char*>(*p++));
这一行导致我的应用程序崩溃,这是我得到的以下错误:
TestApp.exe中0x01664467处未处理的异常:0xC0000005:Access读取位置0x000000FE时发生冲突。
错误将我带到tcscat_s.inl
:
---> while ((*p++ = *_SRC++) != 0 && --available > 0)
{
}
然而,当我尝试并做以下事情时,效果很好:
unsigned char CJSCallDoc::hex_print(unsigned char* pv)
{
unsigned char *p = pv;
if (NULL == pv)
{
return NULL;
}
else
{
char storedString[256];
size_t len = strlen((const char*)pv);
size_t i = 0;
for (; i < len; ++i)
{
strcpy_s(storedString, 256, "Test");
strcat_s(storedString, "WORKS");
}
return *storedString;
}
}
有人能向我解释一下我做错了什么,并给我一些正确的建议吗?
问题是您正在将数据转换为地址,在:中
strcat_s(storedString, reinterpret_cast<char*>(*p++));
*p++
等于您的字符串所包含的值——示例中的第一个元素是p
,所以您将这个p
-十进制值112强制转换为char*
。strcat_s
将尝试从此位置读取字符串,该字符串立即以segfault结束。
相关文章:
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 在函数中返回无符号字符数组,但不返回指针
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 在函数内初始化无符号字符指针将返回空指针
- 使无符号的 int 值成为有符号的 int 值并返回
- C++ 从函数返回无符号字节
- 如何将 16 位无符号 int 转换为 8 位无符号字符并最终返回无符号字符*?
- 尝试将返回无符号值的函数分配给指向无符号的指针时,继续获取 SIGSEGV
- 对于 ((无符号整数)0-1)返回 true>0
- 无符号函数,用于返回使用任何数字的数字
- 将 C++ 转换为 Python 通过引用返回无符号 char*
- CUDA 纹理无法返回无符号长长长的值类型
- 为什么 std::count_if 返回有符号的值而不是无符号的值
- 从int c++的向量返回一个无符号长
- 为什么(c++)从长-长-无符号int转换为长-双精度并返回生成0
- c++返回无符号字符的数组
- 为什么 shared_ptr<T>::use_count() 返回 long 而不是无符号类型?
- 覆盖从 SHA1 返回到字符串的无符号字符*
- 将无符号 int 转换为字节数组并返回
- 以十六进制值的形式返回无符号字符