取消对无符号字符指针的引用并将其值存储到字符串中 我正在研究一个工具,它可以在某些地址中删除值,它既在C语言中,也在C++语言中,尽管我对C++不熟悉,但我想我可以利用C++提供的字符串类型。
我所拥有的是:取消对无符号字符指针的引用并将其值存储到字符串中 我正在研究一个工具,它可以在某些地址中删除值,它既在C语言中,也在C++语言中,尽管我对C++不熟悉,但我想我可以利用C++提供的字符串类型。,c++,c,string,pointers,casting,C++,C,String,Pointers,Casting,我所拥有的是: unsigned char contents_address = 0; unsigned char * address = (unsigned char *) add.addr; int i; for(i = 0; i < bytesize; i++){ //bytesize can be anything from 1 to whatever if(add.num == 3){ contents_address = *(address + i);
unsigned char contents_address = 0;
unsigned char * address = (unsigned char *) add.addr;
int i;
for(i = 0; i < bytesize; i++){ //bytesize can be anything from 1 to whatever
if(add.num == 3){
contents_address = *(address + i);
//printf("%02x ", contents_address);
}
}
无符号字符内容\u地址=0;
无符号字符*地址=(无符号字符*)add.addr;
int i;
对于(i=0;i
正如您所看到的,我试图做的是取消对无符号字符指针的引用。我想做的是有一个字符串变量,并将所有未引用的值连接到其中,最后,而不必通过for case来获取每个元素(通过拥有一个字符数组或只通过指针),从而拥有一个包含所有内容的字符串变量
注意:我需要这样做,因为字符串变量将要进入MySQL数据库,在表中插入数组将是一件痛苦的事情…我不太明白您在这里要做什么(为什么要将一个未引用的值分配给名为…\u address的变量)
但也许您正在寻找的是一个stringstream。我不太明白您想在这里做什么(为什么要为名为…\u address的变量分配一个未引用的值)
但也许您正在寻找的是stringstream。试试我从这个链接中借用的这个:
#包括
#包括
std::字符串hexifyChar(int c)
{
std::stringstream-ss;
ss试试我从这个链接中借用的:
#包括
#包括
std::字符串hexifyChar(int c)
{
std::stringstream-ss;
ss这里有一个相对高效的版本,只执行一次分配,不执行额外的函数调用:
#include <string>
std::string hexify(unsigned char buf, unsigned int len)
{
std::string result;
result.reserve(2 * len);
static char const alphabet[] = "0123456789ABCDEF";
for (unsigned int i = 0; i != len)
{
result.push_back(alphabet[buf[i] / 16]);
result.push_back(alphabet[buf[i] % 16]);
{
return result;
}
#包括
字符串hexify(无符号字符buf,无符号整数len)
{
std::字符串结果;
结果:保留(2*len);
静态字符常量字母表[]=“0123456789ABCDEF”;
for(无符号整数i=0;i!=len)
{
结果:向后推(字母[buf[i]/16]);
结果:向后推(字母[buf[i]%16]);
{
返回结果;
}
这应该比使用iostreams更有效。如果您更喜欢将分配留给使用者的C版本,也可以对其进行简单的修改,以写入给定的输出缓冲区。这里有一个相对有效的版本,它只执行一次分配,不执行额外的函数调用:
#include <string>
std::string hexify(unsigned char buf, unsigned int len)
{
std::string result;
result.reserve(2 * len);
static char const alphabet[] = "0123456789ABCDEF";
for (unsigned int i = 0; i != len)
{
result.push_back(alphabet[buf[i] / 16]);
result.push_back(alphabet[buf[i] % 16]);
{
return result;
}
#包括
字符串hexify(无符号字符buf,无符号整数len)
{
std::字符串结果;
结果:保留(2*len);
静态字符常量字母表[]=“0123456789ABCDEF”;
for(无符号整数i=0;i!=len)
{
结果:向后推(字母[buf[i]/16]);
结果:向后推(字母[buf[i]%16]);
{
返回结果;
}
这应该比使用iostreams更有效。如果您更喜欢将分配留给使用者的C版本,您也可以简单地修改它以写入给定的输出缓冲区。您实际上只是想对字节缓冲区进行十六进制化吗?@KerrekSB是的,我正在尝试对字节缓冲区进行十六进制化,我有什么的大小和地址C++和C++ C++语言都是C语言,C++是几乎不同的语言,而C++几乎是C的超集,它不是严格的超集,不是所有的C程序都是有效的C++程序,也没有几个C++程序是有效的C程序。C和C++中的工作是相等的……这里的差异不适用,所以C++和C++都是C++。你真的只是想把字节缓冲区加起来吗?@ KrErkSB是的,我试图把字节缓冲区加起来,我有我想要的大小和地址。C和C++都是C或C++。它们是不同的语言,而C++是I。它几乎不是C的超集,它不是严格的超集。不是所有的C程序都是有效的C++程序,也没有几个C++程序是有效的C程序。C和C++中的工作是相等的,这里的差异不适用,所以它既是C又是C++。问题是基本上如何将未签名的字符值解压成字符串。问题是基本上如何将未签名的字符删除值连接到一个字符串中。