可能重复:
如何确定C中文件的大小?
如何找出用C语言编写的应用程序打开的文件大小?我想知道大小,因为我想把加载文件的内容放入一个我分配的字符串中malloc().只是写作malloc(10000*sizeof(char));是恕我直言,一个坏主意.
我的应用程序需要将double值转换为char*以写入仅接受字符的管道.通常的方法是使用sprintf()函数或使用iomanip.h头文件中的ostringstream.
事实证明,这两者都有非常糟糕的表现.我的应用程序需要经常进行此转换,以至于它成为主要的瓶颈.
我还可以使用其他功能吗?我可以使用什么逻辑来编写有效的转换函数?到目前为止,我唯一想到的就是使用除法和修改操作来获取每个数字,并将这些数字附加到char*以获得整个double值.这似乎不是一个好方法,并且本身可能会有糟糕的表现.
提前感谢您的想法.
编辑:关于如何使用char*存在一些混淆.char*将是写入管道的fwrite函数的参数.
我一直在试图找出base64解码和编码的openssl文档.我在下面找到了一些代码片段
#include <openssl/sha.h>
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>
char *base64(const unsigned char *input, int length)
{
BIO *bmem, *b64;
BUF_MEM *bptr;
b64 = BIO_new(BIO_f_base64());
bmem = BIO_new(BIO_s_mem());
b64 = BIO_push(b64, bmem);
BIO_write(b64, input, length);
BIO_flush(b64);
BIO_get_mem_ptr(b64, &bptr);
char *buff = (char *)malloc(bptr->length);
memcpy(buff, bptr->data, bptr->length-1);
buff[bptr->length-1] = 0;
BIO_free_all(b64);
return buff;
}
char *decode64(unsigned char *input, int length)
{
BIO *b64, *bmem;
char *buffer = (char *)malloc(length);
memset(buffer, 0, length);
b64 = BIO_new(BIO_f_base64());
bmem = BIO_new_mem_buf(input, length); …Run Code Online (Sandbox Code Playgroud) 如何从C应用程序中调用PHP函数?
例:
include <php.h>
int main()
{
return json_encode(""); // This is a PHP function coming from php.h
}
Run Code Online (Sandbox Code Playgroud)
注意: PHP函数集是非常管理和组织的,我只想在我的C应用程序中拥有该逻辑,所有内容都按需组织.这就是我在PHP语言中找到的美.
我有以下代码来创建位图:
//raw data
PBYTE firstPixel = (PBYTE)((PBYTE)AnsiBdbRecord) + sizeof(WINBIO_BDB_ANSI_381_RECORD);
// declare other bmp structures
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER info;
RGBQUAD rq[256];
// create the grayscale palette
for (int i = 0; i<256; i++)
{
rq[i].rgbBlue = i;
rq[i].rgbGreen = i;
rq[i].rgbRed = i;
rq[i].rgbReserved = 0;
}
//RGBQUAD bl = { 0,0,0,0 }; //black color
//RGBQUAD wh = { 0xff,0xff,0xff,0xff }; // white color
// andinitialize them to zero
memset(&bmfh, 0, sizeof(BITMAPFILEHEADER));
memset(&info, 0, sizeof(BITMAPINFOHEADER));
// fill the fileheader with data …Run Code Online (Sandbox Code Playgroud) 这是完整的情况:我正在.tmx使用瓷砖的地图阅读器处理文件.大多数时候,tile都保存在一个base64字符串中,该字符串包含一个压缩的字节数组gzip.现在我可以读取压缩字节数组,但我不知道如何解压缩它.我读了一些关于zlib和的文档boost,但两者都是关于文件流而且非常复杂......
我对数据压缩领域很陌生,所以如果有人知道某种解决方案或一些有用的文档,我真的很感兴趣.
无论如何,都可以将opencv mat对象转换为base64。
我使用下面的URL进行base64编码和解码:
http://www.adp-gmbh.ch/cpp/common/base64.html
下面是代码片段:
const unsigned char * inBuffer = reinterpret_cast(image.data);
我需要创建一个byte[]长度为16.(一个字节数组,有128位用作AES加密中的密钥).
以下是有效的字符串
"AAECAwQFBgcICQoLDA0ODw=="
Run Code Online (Sandbox Code Playgroud)
确定字符串是否为128位的算法是什么?或者是反复试验是创建这种128位字符串的唯一方法吗?
码
static void Main(string[] args)
{
string firstString = "AAECAwQFBgcICQoLDA0ODw=="; //String Length = 24
string secondString = "ABCDEFGHIJKLMNOPQRSTUVWX"; //String Length = 24
int test = secondString.Length;
byte[] firstByteArray = Convert.FromBase64String((firstString));
byte[] secondByteArray = Convert.FromBase64String((secondString));
int firstLength = firstByteArray.Length;
int secondLength = secondByteArray.Length;
Console.WriteLine("First Length: " + firstLength.ToString());
Console.WriteLine("Second Length: " + secondLength.ToString());
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
调查结果:
对于256位,我们需要256/6 = 42.66个字符.这四舍五入到43个字符.[使其可被4整除=]
对于512位,我们需要512/6 = 85.33个字符.这是四舍五入到86 char.[使其可被4整除==]
对于128位,我们需要128/6 = 21.33个字符.这被舍入到22个字符.[使其可被4整除==]
我正在使用ed25519-donna进行数字签名。
密钥是unsigned char[32],签名是unsigned char[64]。
我找到了这个 base64 编码,但它只能解码为string.
我已经找到并尝试了很多技术,但仍然不确定如何转换。
如何将 Base64 解码后的数据string转换为unsigned char[32]?
我的应用程序需要在 std::string 中编码和传输一些十六进制值。所以我就这样做。
static string printHex(const string& str)
{
stringstream ss;
ss << "[ " << hex;
for (int i = 0; i < str.size(); i++)
{
ss << (((uint32_t)str[i] )& 0xFF) << " ";
}
ss << "]" << dec;
return ss.str();
}
int main()
{
char ptr[] = {0xff, 0x00, 0x4d, 0xff, 0xdd};// <--see here, 0x00 is the issue.
string str(ptr);
cout << printHex(str) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
显然,该字符串仅获取 0x00 以内的值,其余数据都会丢失。如果没有 0x00,它将适用于任何值。但我也需要 0x00。请提出一个解决方案。谢谢您的帮助。
我正在使用这部分代码
char encrypted_text[1024];
RSA_public_encrypt(sizeof(message), message, encrypted_text, rsa, RSA_PKCS1_OAEP_PADDING);
printf("encrypted text: %s\n", encrypted_text);
Run Code Online (Sandbox Code Playgroud)
而optput是这样的:
v0 뷾s E Z N\ 6~ : & / 〜ͯ L d Ǡ E [ h U.vH2F1Qb^) g ,a Ҩ xvU| > ˢ=W ő \ g
有可能消除 符号??
c++ ×8
base64 ×4
c ×3
openssl ×2
.net ×1
biometrics ×1
bitmap ×1
c# ×1
compression ×1
cryptography ×1
encryption ×1
file ×1
gzip ×1
inflate ×1
opencv ×1
performance ×1
php ×1
rsa ×1
size ×1
unix ×1