我之前曾问过一个与生成随机无符号字符有关的问题,但是由于我应用的简单性,所以提出了很好的建议.
srand((unsigned)time(NULL));
rand()%256;
我在节目开始时给这个号码打了一次,但是我一直在'?' 对于一个随机的char.不是所有的时间,但大部分时间,这使我失去了我的焦点.
我的代码给出了我期望的unsigned char指针的不同长度.我认为我应该为pph和pphChar获得12(或13)或0(或1).我的问题是什么?当我重复跑步时,每次长度和长度都有不同的结果.
我怎样才能获得pph的长度?
我需要在末尾加上'\n'来确定长度吗?
我使用VS2010,XP和C++.
#include "stdafx.h"
#include <stdlib.h>
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
typedef unsigned char uint8_t;
int _tmain(int argc, _TCHAR* argv[])
{
int length;
int len = 13;
uint8_t *phh;
char * phhChar;
printf("assigned mem %d\n", sizeof(unsigned char)*len);
phh = (unsigned char *) malloc(sizeof(unsigned char)*len);
phhChar = (char *) malloc(sizeof(char)*len);
phh[0] = (unsigned char) '1';
phh[1] = (unsigned char) '2';
phh[2] = (unsigned char) '3';
phh[3] = (unsigned char) '4';
phh[4] = (unsigned char) '5';
phh[5] = …Run Code Online (Sandbox Code Playgroud) 如何将数据从int(int port1 = 52010)复制到一对无符号字符(unsigned char port2[2]?我不知道如何处理除法.
我有以下代码(我删除了无用的部分):
unsigned char* decrypted= (unsigned char *) malloc(500);
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);
Run Code Online (Sandbox Code Playgroud)
我想只显示第bufSize一个字符,decrypted因为它实际上显示了很多无意义的字符!
我有以下代码:
long int compute_data_length(unsigned char* buf, int data_offset) {
long int len;
if(!buf)
return -1;
switch(data_offset) {
case 2: {
len = (buf[2] << 8) | buf[3];
}
break;
case 8: {
len = (buf[2] << 56) |
(buf[3] << 48) |
(buf[4] << 40) |
(buf[5] << 32) |
(buf[6] << 24) |
(buf[7] << 16) |
(buf[8] << 8) |
(buf[9] );
}
break;
default: len = -1; break;
}
return len;
}
Run Code Online (Sandbox Code Playgroud)
编译时,我收到以下警告:
math_fun.c:240:21:警告:左移计数> =类型的宽度[默认启用] len =(buf …
我无法弄清楚我从这里得到分段错误似乎是什么问题:
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
void alloc(unsigned char *data) {
data = (unsigned char *) malloc(20);
memset(data, 0, 20);
}
void main() {
unsigned char *data = NULL;
int i;
alloc(data);
for (i = 0; i < 20; i++) {
data[i] = i;
printf("%d ", *(data + i));
}
free(data);
}
Run Code Online (Sandbox Code Playgroud)
无符号字符是1个字节,因此循环20应该是正确的
我从文件中获取一个字符串,并将该字符串转换为未编码的 char[]。这是我的代码:
unsigned char c[16];
std::string message = ReadFile(); // get string from file
strcpy((char*)c,message.c_str());
Run Code Online (Sandbox Code Playgroud)
并将字符串转换为无符号字符*
unsigned char* c;
std::string message = ReadFile(); // get string from file
c = (unsigned char*)message.c_str();
Run Code Online (Sandbox Code Playgroud)
我不明白他们有什么不同。他们是一样的吗?
unsigned char a = 10,b;
b = ~a;
printf(" %d \n ",b);
Run Code Online (Sandbox Code Playgroud)
输出:
245
如果我使用相同的程序int而不是unsigned charo/p更改
-11
我有一个chars向量,其中包含一些数据元素。
std::vector<unsigned char> data_1;
Run Code Online (Sandbox Code Playgroud)
我有一个未签名的char *,它指向另一组数据元素。
unsigned char * data_2;
Run Code Online (Sandbox Code Playgroud)
问题:
有没有一种方法可以合并data_2到data_1向量中而根本不引起数据元素的复制?
我读到了本次讨论中提到的移动语义,但是我不确定在这种情况下是否有可能。
甲char数据类型是不能保证签名,它是该装置上一些实施方式中signed,和对他人它是unsigned。那么为什么人们总是忽略signed限定词呢?
char c = 'C'; // can be signed or unsigned
signed char sc = 'D'; // explicitly signed
unsigned char uc = 'e'; // explicitly unsigned
Run Code Online (Sandbox Code Playgroud)
对于可移植性,我就应该总是限定一个char带有signed如果我想的字符保持负值?
正如我所了解的其他类型,如int, long,short总是signed除非明确限定为unsigned。