char (* text)[1][45+1];
text = calloc(5000,(130+1));
strcpy(0[*text],"sometext)");
Run Code Online (Sandbox Code Playgroud)
现在我想将"sometext"编码为base58,但是,我不知道如何,奇怪的是,在C中没有一个BASE58的例子.
我感兴趣的base58编码使用这些符号:
123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ
它已被优化以减少误读的风险,因此例如0和'O'都消失了.
PS不要介意变量的奇怪分配和声明,我正在试验.
我目前有这种循环
while(1)
{
generate_string(&buffer);
for(int i = 0; i < filelines; i++)
{
if(strcmp(buffer,line[i]) == 0)
{
/* do something */
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个包含几百万个字符串的文件(希望很快就会减半),所有这些字符串的数量都存储在filelines中
line [i]基本上是存储字符串本身的位置.
目前,由于这些百万字符串的比较,函数generate_string(&buffer); 每秒执行约42次.有没有更快的方法在C中进行字符串比较?
我需要扫描我的PCI总线并获取特定供应商的特定设备的信息.我的目标是找到AMD显卡的PCI区域大小,以便将该卡的PCI内存映射到用户空间,以便进行i2c传输并查看来自各种传感器的信息.
为了扫描PCI总线,我在大约一年前下载并编译了pciutils 3.1.7 for Windows x64.据说它使用DirectIO.
这是我的代码.
int scan_pci_bus()
{
struct pci_access *pci;
struct pci_dev *dev;
int i;
pci = pci_alloc();
pci_init(pci);
pci_scan_bus(pci);
for(dev = pci->devices; dev; dev = dev->next)
{
pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_CLASS | PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES | PCI_FILL_PHYS_SLOT);
if(dev->vendor_id == 0x1002 && dev->device_id == 0x6899)
{
//Vendor is AMD, Device ID is a AMD HD5850 GPU
for(i = 0; i < 6; i++)
{
printf("Region Size %d %x ID %x\n", dev->size[i], dev->base_addr[i], dev->device_id); …Run Code Online (Sandbox Code Playgroud) 我使用MPFR库对大数字进行计算,但也返回小数点后8位数字的双精度数。
我将数字mpfr_sprintf转换为char数组,以确保精度或任何功能都不会丢失。一切都很好,除了我在文档中没有找到任何千位分隔符选项(否则我错过了)。
给定一个诸如20043.95381376之类的数字,我希望将其表示为20,043.95381376,以提高可读性。
或数字164992818.48075795为164,992,818.48075795
我读到有关应加到printf / sprintf中的撇号,但这似乎是UNIX / POSIX,并且我是Windows用户。
由于在内部我将数字打印为字符串,所以我认为我可以做的是编写一个自定义实现,该实现将根据数字自动添加逗号(> 1000> 10000> 100000,依此类推),但随后我意识到像strncpy这样的函数或strcpy将基本上替换,而不是将逗号添加到所需位置。这就是我回到如何做的第一件事。
我该怎么做?
我有一个温度监控程序,我写了一会儿,监控我的AMD显卡上的温度和风扇,检查风扇故障或过热.它的问题在于,它需要事先知道哪个进程将使用GPU(图形处理单元),以便杀死它或优雅地使其停止以避免过热.
为了使我的程序更具动态性,我需要一种方法来查找哪个进程正在使用GPU,就像哪个进程正在使用CPU时间(任务管理器).一个这样的应用程序是来自SysInternals的Process Explorer.
我在问,我怎么能在Windows中用C做这个?我知道,如果有这样的方式,它将针对Vista及以上.
出于我的目的,我需要为Windows编写内核模式驱动程序.目前我正在尝试使其在Windows 7 x64下运行.
我在Visual Studio 2012中创建了一个简单项目,其中包含KMDF驱动程序的默认代码.我通过测试签名编译了代码.驱动程序已编译并签名.我也启用了Test-Signing ON,清晰地显示在桌面的左下角.
在尝试启动驱动程序作为服务时,我总是得到一个错误代码6:无效句柄错误.(我已经简化了代码,只是尝试启动它但仍然无效;默认代码也不起作用)
基本上,我遇到的问题与这里提出的问题相同
不幸的是他从来没有回答过.我尝试了提供的解决方案,但它也没有帮助.
我试图启动驱动程序的代码是
int _cdecl main(void)
{
HANDLE hSCManager;
HANDLE hService;
SERVICE_STATUS ss;
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
printf("Load Driver\n");
if(hSCManager)
{
printf("Create Service\n");
hService = CreateService(hSCManager, "Example",
"Example Driver",
SERVICE_ALL_ACCESS | SERVICE_START | DELETE | SERVICE_STOP ,
SERVICE_KERNEL_DRIVER,
SERVICE_DEMAND_START,
SERVICE_ERROR_IGNORE,
"\\path\\to\\driver\\KMDFDriver1.sys",
NULL, NULL, NULL, NULL, NULL);
if(!hService)
{
hService = OpenService(hSCManager, "Example",
SERVICE_ALL_ACCESS | SERVICE_START | DELETE | SERVICE_STOP);
if(!hService)
{
// If initial startup of the driver failed, it …Run Code Online (Sandbox Code Playgroud) 在我的Android应用程序中,我有一个SHA256哈希值,我必须使用RIPEMD160消息摘要算法进一步散列.
我可以输出任何字符串的正确sha256和ripemd160哈希,但是当我尝试使用ripemd160散列sha256哈希时,我得到一个不正确的哈希值.
根据在线哈希计算器,字符串'test'(全部小写)的SHA256值为:
9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
Run Code Online (Sandbox Code Playgroud)
字符串'test'的RIPEMD160值为:
5e52fee47e6b070565f74372468cdc699de89107
Run Code Online (Sandbox Code Playgroud)
根据在线计算,使用ripemd160散列生成的sha256哈希的值为:
4efc1c36d3349189fb3486d2914f56e05d3e66f8
Run Code Online (Sandbox Code Playgroud)
而我的应用程序给我的是:
cebaa98c19807134434d107b0d3e5692a516ea66
Run Code Online (Sandbox Code Playgroud)
这显然是错的.
这是我的代码:
public static String toRIPEMD160(String in)
{
byte[] addr = in.getBytes();
byte[] out = new byte[20];
RIPEMD160Digest digest = new RIPEMD160Digest();
byte[] sha256 = sha256(addr);
digest.update(sha256,0,sha256.length);
digest.doFinal(out,0);
return getHexString(out);
}
public static byte[] sha256(byte[] data)
{
byte[] sha256 = new byte[32];
try
{
sha256 = MessageDigest.getInstance("SHA-256").digest(data);
}
catch(NoSuchAlgorithmException e)
{}
return sha256;
}
Run Code Online (Sandbox Code Playgroud)
对于ripemd160算法,sha256需要bouncycastle和java.security.MessageDigest.
我提供此示例应用程序来显示我的问题
#include <stdio.h>
#include <stdlib.h>
#include <openssl/ec.h>
#include <openssl/bn.h>
int main()
{
EC_KEY *pkey = NULL;
EC_POINT *pub_key = NULL;
const EC_GROUP *group = NULL;
BIGNUM start;
BIGNUM *res;
BN_CTX *ctx;
BN_init(&start);
ctx = BN_CTX_new();
res = &start;
BN_hex2bn(&res,"3D79F601620A6D05DB7FED883AB8BCD08A9101B166BC60166869DA5FC08D936E");
pkey = EC_KEY_new_by_curve_name(NID_secp256k1);
group = EC_KEY_get0_group(pkey);
pub_key = EC_POINT_new(group);
EC_KEY_set_private_key(pkey, res);
assert(EC_POINT_bn2point(group,res, pub_key, ctx)); // Null here
EC_KEY_set_public_key(pkey, pub_key);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是从私钥显示公钥(应该是椭圆私钥).在遇到类似的问题之前,我不知道怎么做
这是我从哪里指出自己如何获取公钥并使用EC_POINT_bn2point而不是根据OpenSSL源在内部执行BN_hex2bn的hex2point.
那么,为什么EC_POINT_bn2point返回NULL?我正在认真考虑重新编译OpenSSL并调试一些调试例程以找出失败的原因.
我基本上有这段代码.
char (* text)[1][80];
text = calloc(2821522,80);
Run Code Online (Sandbox Code Playgroud)
我计算它的方式,calloc应该分配215.265045兆字节的RAM,但是,程序最终超过了这个数字并分配了近700mb的内存.
所以看来我无法正确知道该功能将分配多少内存.
如何计算这个属性?