converting a std::string to BYTE[16]

Posted on 2004-04-10
Last Modified: 2008-02-01
i need some help in convert a std::string to BYTE[16]. does anyone have any idea on how to do so? thanks!

Question by:ashrobo

Assisted Solution

mnashadka earned 25 total points
ID: 10797567
If you need to create a new variable, you can cast the BYTE array to a char * and use strncpy to get the value:
  BYTE bytes[16] = {0};
  std::string str = "hello";
  // Copy up to 16 characters into bytes
  strncpy((char *)bytes, str.c_str(), 16); // You could also use reinterpret_cast here

If you need to just use an existing variable in a function call, you can cast the string.c_str() to a BYTE *, but this could be an issue if the size is wrong:
myfunc((BYTE *)str.c_str()); // You could also use reinterpret_cast here

Hope this helps.
LVL 30

Expert Comment

ID: 10797586
>>myfunc((BYTE *)str.c_str());
This method would be unsafe, since you're removing the constantness from the pointer.
Recommend putting the constant into the cast:
myfunc((const BYTE *)str.c_str());
LVL 86

Assisted Solution

jkr earned 25 total points
ID: 10797591
BYTE b[16];
string s = "12345678";
unsigned int unLen = s.size();
memset ( b, 0, sizeof(b));
memcpy ( b, s.c_str(), unLen > sizeof(b) ? sizeof(b) : unLen);
Use Case: Protecting a Hybrid Cloud Infrastructure

Microsoft Azure is rapidly becoming the norm in dynamic IT environments. This document describes the challenges that organizations face when protecting data in a hybrid cloud IT environment and presents a use case to demonstrate how Acronis Backup protects all data.

LVL 30

Accepted Solution

Axter earned 75 total points
ID: 10797612
I think you're method is safer then the code used for the previous strncpy method.
But just to add a little more efficientcy you could remove the memset, and add a nullifier after copying the string:

memcpy ( b, s.c_str(), unLen > sizeof(b) ? sizeof(b) : unLen);
b[unLen] = 0;
LVL 30

Expert Comment

ID: 10797619

memcpy ( b, s.c_str(), unLen > sizeof(b) ? sizeof(b) : unLen);
if (unLen < sizeof(b)) b[unLen] = 0;

Expert Comment

ID: 10797834
>>Recommend putting the constant into the cast:
>>myfunc((const BYTE *)str.c_str());

Axter, I agree typically, but that depends upon whether the function takes a const or not.  I was assuming that the function took a BYTE * as a parameter, at which point putting the const there will just make you have to do a const_cast or whatever.  Even if it should be const in the function prototype, there are a lot of programmers out there who, for one reason or another (usually training), don't make the parameter const in the function.

Author Comment

ID: 11003144
i'm sorry for not replying, i haven't had the time to try the solutions provided. how can i deal with this?

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generat…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question